我试图在C#中以最简单的方式获得comp1的价值。我希望能够以最少检查是否存在像Primary这样的元素等的方式来做到这一点。
即
// pseudo code
xmlItem = root.SelectSingleNode "/Primary/Complex?Name='comp1'"
所以我可以检查xmlItem
是null
还是没有元素,而不是每次访问子节点时都进行很多检查。这是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>
答案 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); }