XMLNodeList 奇怪的行为
XMLNodeList Weird Behavior
以下XML为例:
<root>
<lines>
<line>
<number>1</number>
</line>
<line>
<number>2</number>
</line>
</lines>
</root>
XmlNodeList nodeList = doc.SelectNodes("//lines/line");
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("//number");
}
以上代码将导致两次迭代的索引 = 1。
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("number");
}
以上代码将分别得到 1,2。我知道 // 找到 xpath 的第一次出现,但我觉得第一次出现应该是相对于节点本身的。即使从子节点中选择节点时,该行为似乎也是从根中找到第一次出现的。这是微软希望它工作的方式还是这是一个错误。
yeah thanks but just removing the slashes worked as well as in my second example.
删除斜线只有效,因为 number
是 line
的直接子元素。如果它在层次结构中更靠下:
<root>
<lines>
<line>
<other>
<number>1</number>
</other>
</line>
</lines>
</root>
您仍然需要使用 .//number
。
I just think it is confusing that if you are searching for node within a node that // would go back to the whole document.
这就是 XPath 语法的设计方式。 //
在 XPath 表达式的开头意味着评估上下文是文档节点 - XML 文档的最外层节点。 .//
表示路径表达式的上下文是当前上下文节点。
如果你仔细想想,有一种方法可以在任何上下文中从整个文档中 select 实际上是有用的。
Is this the way microsoft intended this to work or is this a bug.
Microsoft 正在实施 XPath 标准,是的,这就是 W3C 希望 XPath 库工作的方式,这不是错误。
以下XML为例:
<root>
<lines>
<line>
<number>1</number>
</line>
<line>
<number>2</number>
</line>
</lines>
</root>
XmlNodeList nodeList = doc.SelectNodes("//lines/line");
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("//number");
}
以上代码将导致两次迭代的索引 = 1。
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("number");
}
以上代码将分别得到 1,2。我知道 // 找到 xpath 的第一次出现,但我觉得第一次出现应该是相对于节点本身的。即使从子节点中选择节点时,该行为似乎也是从根中找到第一次出现的。这是微软希望它工作的方式还是这是一个错误。
yeah thanks but just removing the slashes worked as well as in my second example.
删除斜线只有效,因为 number
是 line
的直接子元素。如果它在层次结构中更靠下:
<root>
<lines>
<line>
<other>
<number>1</number>
</other>
</line>
</lines>
</root>
您仍然需要使用 .//number
。
I just think it is confusing that if you are searching for node within a node that // would go back to the whole document.
这就是 XPath 语法的设计方式。 //
在 XPath 表达式的开头意味着评估上下文是文档节点 - XML 文档的最外层节点。 .//
表示路径表达式的上下文是当前上下文节点。
如果你仔细想想,有一种方法可以在任何上下文中从整个文档中 select 实际上是有用的。
Is this the way microsoft intended this to work or is this a bug.
Microsoft 正在实施 XPath 标准,是的,这就是 W3C 希望 XPath 库工作的方式,这不是错误。