给出以下xml(简化)
<root xmlns="http://schemas.datacontract.org/2004/07/Base" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Items>
<item xmlns:a="http://schemas.datacontract.org/2004/07/Base" i:type="a:A"></item>
<item xmlns:a="http://schemas.datacontract.org/2004/07/Base" i:type="a:B"></item>
</Items>
</root>
我正试图沿着这条线做点什么。
XNamespace xmlInstanceNs = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace baseNs = "http://schemas.datacontract.org/2004/07/Base";
var items = root.Descendants(baseNs + "item");
var aItems = items.Where(i => i.Attribute(xmlInstanceNs + "type").Value == baseNs + "A");
当然这不起作用,因为最后一行基本上是将字符串“a:A”与XName“{http://schemas.datacontract.org/2004/07/Base} A”进行比较。它们不相同。
有没有办法将“a:A”字符串解析为其XName等价物,而无需手动迭代xml以查找所有命名空间缩写?
答案 0 :(得分:1)
items.Where(i =>
baseNs + "A" ==
i.GetNamespaceOfPrefix(i.Attribute(xmlInstanceNs + "type").Value.Split(new Char[] { ':' })[0]) + "A")