SelectSingleNode返回错误的Node实例值

时间:2013-09-05 03:49:44

标签: c# xml

我正在解析一些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>

2 个答案:

答案 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