C# SelectSingleNode返回错误的节点实例值

C# SelectSingleNode返回错误的节点实例值,c#,xml,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("//

我正在解析一些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>
XPath//是从文档根中选择任何子体的方法//ns:x将选择文档中的每个ns:x-它的作用域不是作为根节点的父节点-因此将其与SelectSingleNode一起使用将始终选择文档中的第一个ns:x

如果将XPath更改为简单的ns:x,这将只选择子ns:x,那么它应该可以工作

实际上,您可以通过修改第一个XPath调用以选择//ns:pits/ns:x[1]来删除第二个XPath调用,这将选择文档中每个ns:pits的第一个ns:x子项。

使用以下方法:

XmlNode x = pit.SelectSingleNode(".//ns:x", nsmgr);
注意点。在//ns:x之前