如何选择具有属性名称的 XML 节点

本文关键字:属性 节点 XML 何选择 选择 | 更新日期: 2023-09-27 18:37:08

>我得到这样的XML数据:

<Persons>
    <Person Role="Writer">Jame</Person>
    <Person Role="Writer">Matt</Person>
    <Person Role="Producer">Ben</Person>
</Persons>

然后我试试:

Persons.SelectSingleNode("ns:Person Role='"Writer'"", mng).InnerText;

这不能选择节点。它说:

'ns:Person Role='Writer'' has an invalid token.

NS 是命名空间与其他节点配合使用正常

如何选择具有属性名称的 XML 节点

使用 LINQ to XML

XDocument doc = XDocument.Parse(xmlString);
var nodes = doc.Root.Elements(e => e.Attribute.Value == "Writer");
List<string> values = nodes.Select(n => n.Value).ToList();
Persons.SelectSingleNode("ns:Person[@Role='Writer']", mng).InnerText;

是你想要的。

如果是我,我会首先获取节点,如果它不是空,则获取 InnerText,以防万一它不存在。

您希望

使用[@Role='']来匹配属性。下面是来自 LINQPad 的完整示例:

var xml = "<Persons><Person Role='"Writer'">Jame</Person><Person Role='"Writer'">Matt</Person><Person Role='"Producer'">Ben</Person></Persons>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
Console.WriteLine(
   xmlDoc.DocumentElement
         .SelectSingleNode(@"//Persons/Person[@Role='Writer']").OuterXml);