【发布时间】:2018-05-11 22:26:18
【问题描述】:
我是 .NET 中使用 Linq 解析的新手。我可能有一个简单的问题,希望有人能快速为我解答。我有一个巨大的 xml,我已将其压缩以找出我的查询失败的原因。我需要从包含属性类型的节点内的 xml 中解析一个元素。查询需要匹配属性类型并返回元素名称的元素值。但是,我遇到的问题是,我的 xml 在属性名称和元素名称之前有 d: 前缀,而我的 Linq 查询只是阻塞了它。如果我从 xml 和查询字符串中删除 d: 前缀,它可以工作并返回正确的值,但使用前缀它不起作用。有人可以看看我的 Linq 查询,看看我在前缀上做错了什么吗?
精简的xml代码
<root>
<Contact xmlns:c="http://test/common/1.0">
<c:IBase type="d:testInfo" xmlns:d="http://">
<d:ActivityID>00000</d:ActivityID>
</c:IBase>
<c:IBase type="d:testInfo" xmlns:d="http://">
<d:ActivityID>00001</d:ActivityID>
</c:IBase>
</Contact>
</root>
Linq 查询
var node = from el in xml.Descendants("IBase")
where
el.Attribute("type").Value == "testInfo"
select el.Element("ActivityID").Value;
foreach ( String s in node )
Console.WriteLine(string.Format("Id= {0}",s));
【问题讨论】:
-
这个答案向您展示了如何读取带有命名空间的元素:stackoverflow.com/a/4986029/526724