[英]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");
}
上面的代码将导致两次迭代的index = 1。
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("number");
}
上面的代码将分别为1,2。 我知道//找到xpath的第一次出现,但是我觉得第一次出现应该与节点本身有关。 即使从子节点中选择节点,该行为似乎也是从根中找到第一个出现的行为。 这是Microsoft预期的工作方式还是错误。
是的,但是删除斜线的效果与我的第二个示例一样好。
删除斜线仅适用,因为number
是line
的直接子元素。 如果它在层次结构中更靠后:
<root>
<lines>
<line>
<other>
<number>1</number>
</other>
</line>
</lines>
</root>
您仍然需要使用.//number
。
我只是觉得令人困惑,如果您要在节点中搜索节点,//将返回整个文档。
这就是XPath语法的设计方式。 //
XPath表达式的开头表示评估上下文是文档节点-XML文档的最外层节点。 .//
表示路径表达式的上下文是当前上下文节点。
如果您考虑一下,在任何情况下都有一种从整个文档中进行选择的方法实际上很有用。
这是Microsoft预期的工作方式还是错误。
Microsoft正在实施XPath标准,是的,这是W3C希望XPath库能够工作的方式,这不是错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.