C# SelectSingleNode返回错误的节点实例值
我正在解析一些XML。我正在迭代2个Pit节点,并试图找出它们的x节点值 我的问题是:当我检查每个Pit节点的x值时,它总是说值是8,而第二个节点的x值实际上是1 为什么会发生这种情况?我如何修复它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("//
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之前