繁体   English   中英

如何使用属性名称选择XML节点

[英]how to select XML node with Attribute names

我得到这样的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是名称空间可以与其他节点正常工作

使用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;

是你想要的。

如果是我,我将首先获取该节点,如果不为null,则获取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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM