1

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

4

3 回答 3

0

使用 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();
于 2013-10-29T00:05:28.503 回答
0
Persons.SelectSingleNode("ns:Person[@Role='Writer']", mng).InnerText;

是你想要的。

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

于 2013-10-29T00:06:25.807 回答
0

您要使用[@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);
于 2013-10-29T00:09:46.367 回答