我正在解析一些XML。我正在迭代2 Pit
个节点并尝试找出他们的x
节点值。
我的问题:当我检查每个Pit
个节点x
值时,它的值始终为8
,当第二个节点x
值时实际上是1
。
为什么会发生这种情况,我该如何解决?
XmlNodeList xNodes = xdoc.DocumentElement.SelectNodes("//ns:pits", nsmgr);
foreach (XmlNode pit in xNodes) {
XmlNode x = pit.SelectSingleNode("//ns:x", nsmgr);
MessageBox.Show(x.InnerText, ""); // Always prints "8", when 1 should be "8", another "1"
}
我正在使用的数据:
<?xml version="1.0"?>
<xml12d>
<pit>
<x>8.89268569</x>
<y>1.26122586</y>
<z>1.62414621</z>
</pit>
<pit>
<x>1.09268598</x>
<y>7.24091243</y>
<z>8.20896044</z>
</pit>
</xml12d>
答案 0 :(得分:5)
XPath //
是abbreviated syntax,用于从文档根目录中选择任何后代。 //ns:x
将选择文档中的每个ns:x
- 它不作为根作用于其父节点 - 因此将其与SelectSingleNode
一起使用将始终选择第一个ns:x
在文件中。
如果您将XPath更改为ns:x
只会选择子 ns:x
,那么它应该有效。
您实际上可以通过修改第一个选择//ns:pits/ns:x[1]
来删除第二个XPath调用,这将选择文档中每个ns:x
的第一个ns:pits
子项。
答案 1 :(得分:2)
使用此:
XmlNode x = pit.SelectSingleNode(".//ns:x", nsmgr);
注意.
//ns:x
)