c# - 在 C# 中使用 Ling 解析 xml
问题描述
嗨,我有一个 Xml 文档,使用从文件中读取
var doc = XDocument.Load(reader);
xml看起来像这样,
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE document SYSTEM 'xmlschemas/some.dtd'>
<document xmlns='http://www.abcd.com/dxl' version='9.0' someversion='1.0'
replicaid='0xxxxDB' form='Test'>
<item name='From'>
<text>John Doe</text>
</item>
<item name='SentTo'>
<text>Another John Doe</text>
</item>
<item name='ModTime'>
<datetime dst='true'>20180129T114649,22-02</datetime>
</item>
<item name='Body' sign='true' seal='true'>
<attachmentref name='some.pdf' displayname='some.pdf'>
<picture height='34px' width='342px'>
<notesbitmap>
lQAmAAAAAAAAAAAAAAABAAAAAAAAAFYBI
</notesbitmap>
</picture>
如何在定位具有特定名称属性的“项目”标签时使用 Linq 解析这样的 xml?试过这个没有成功。,
doc.Descendants("document")
.Where(item =>
{
string cus = (string)item.Element("item");
return cus != null && cus == "name";
})
.Descendants("SentTo")
.Select(d => d.Value)
.ToList();
我想定位具有名称属性“From”和“SentTo”的项目标签,还有其他我可能不想定位的标签。提前致谢。
解决方案
部分问题是您正在寻找没有命名空间的元素,但您的文档确实指定了默认命名空间。幸运的是,LINQ to XML 使命名空间处理变得容易。
您还Descendants
用来尝试查找属性的值(我相信),这不是它的工作原理。
这是一个可行的示例-假设您的目标是从具有以下属性的<text>
每个元素中获取内容:<item>
name
SentTo
using System;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
var doc = XDocument.Load("test.xml");
XNamespace ns = "http://www.abcd.com/dxl";
var sentToValues = doc.Root
.Elements(ns + "item")
.Where(item => (string) item.Attribute("name") == "SentTo")
.Select(item => (string) item.Element(ns + "text"))
.ToList();
foreach (var value in sentToValues)
{
Console.WriteLine(value);
}
}
}
推荐阅读
- android - 我的应用程序在分析模式下运行时停止响应
- android - 用户如何在 TableLayout 中的特定单元格内写入,以便显示单元格中的用户文本?
- android - PackageName in DevicePolicyManager.clearPackagePersistentPreferredActivities(ComponentName admin,String packageName)
- objective-c - Error "request too large (413)" when trying to upload a PDF file to OneNote
- sql - 如何在 SQL 查询中添加条件语句?
- java - Java method return type acceptable for method argument [...]
- c++ - 编译器忽略运算符新分配
- javascript - 在页面加载时显示底部而无需任何滚动
- java - 扫描仪 noSuchElementException。它的原因是什么?我该如何解决?
- node.js - 如何进行对话流会话