繁体   English   中英

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");
}

上面的代码将导致两次迭代的index = 1。

foreach(XmlNode node in nodeList)
{
    int index = node.SelectSingleNode("number");
}

上面的代码将分别为1,2。 我知道//找到xpath的第一次出现,但是我觉得第一次出现应该与节点本身有关。 即使从子节点中选择节点,该行为似乎也是从根中找到第一个出现的行为。 这是Microsoft预期的工作方式还是错误。

是的,但是删除斜线的效果与我的第二个示例一样好。

删除斜线仅适用,因为numberline的直接子元素。 如果它在层次结构中更靠后:

<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM