首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLNodeList怪异行为

XMLNodeList怪异行为
EN

Stack Overflow用户
提问于 2016-02-18 22:37:26
回答 1查看 57关注 0票数 0

以以下XML为例:

代码语言:javascript
复制
<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。

代码语言:javascript
复制
foreach(XmlNode node in nodeList)
{
    int index = node.SelectSingleNode("number");
}

上述代码将分别产生1,2。我知道xpath的第一次出现,但我觉得第一次出现应该是相对于节点本身。即使在从子节点中选择节点时,该行为似乎也会从根中找到第一次出现。这是微软想让它工作的方式,还是一个bug。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-19 07:48:31

是的,谢谢,但是在我的第二个例子中,去掉斜杠效果很好。

删除斜杠只有效,因为numberline的直接子元素。如果它在等级体系中更低:

代码语言:javascript
复制
<root>
  <lines>
    <line>
      <other>
        <number>1</number>
      </other>
    </line>
  </lines>
</root>

您仍然需要使用.//number

我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的。

这正是设计XPath语法的方式。//表达式开头的XPath意味着计算上下文是文档节点-- XML的最外层节点。.//意味着路径表达式的上下文是当前上下文节点。

如果您仔细考虑一下,那么在任何上下文中从整个文档中进行选择实际上是很有用的。

这是微软想让它工作的方式,还是一个bug。

微软正在实现XPath标准,没错,这就是W3C打算让XPath库工作的方式,而它不是一个bug。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35493882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档