如何直接从xml获取值(最好使用XPath)?

时间:2010-03-05 21:11:27

标签: c# .net xml xpath

我试图在C#中以最简单的方式获得comp1的价值。我希望能够以最少检查是否存在像Primary这样的元素等的方式来做到这一点。

//  pseudo code
xmlItem = root.SelectSingleNode "/Primary/Complex?Name='comp1'"

所以我可以检查xmlItemnull还是没有元素,而不是每次访问子节点时都进行很多检查。这是xml,但实际的是嵌套的,但只有leaf xml节点具有我们正在寻找的特定名称。

<?xml version="1.0" ?>
<Primary Type="">
   <Simple Name="smp"></Simple>
   <Complex Name="comp0" Value="123"></Complex>
   <Complex Name="comp1" Value="456"></Complex>
   <Complex Name="comp2" Value="789"></Complex>
</Primary>

4 个答案:

答案 0 :(得分:5)

我认为XPath是/Primary/Complex[@Name='comp0']/@Value

顺便说一下,你的XML是错误的。没有简单的结束标记,没有材质的开始标记。我假设</Material>应为</Simple>

答案 1 :(得分:3)

var xmlItem = root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value");

答案 2 :(得分:2)

尝试

root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value");

答案 3 :(得分:0)

您将要使用System.Xml.XPath命名空间中的XPathDocument和XPathNavigator。

XPathDocument fileToParse = new XPathDocument(FullPathToFile);
XPathNavigator fileNavigator = fileToParse.CreateNavigator();
XPathNavigator selected = fileNavigator.SelectSingleNode("./Primary/Complex[@Name='comp1']/@Value");
//selected will be null if your XPath doesn't select anything...
if(selected != null){ Console.WriteLine(selected.Value); }