Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XMLNodeList奇怪的行为_C#_.net_Xml_Xpath_Xmlnodelist - Fatal编程技术网

C# XMLNodeList奇怪的行为

C# XMLNodeList奇怪的行为,c#,.net,xml,xpath,xmlnodelist,C#,.net,Xml,Xpath,Xmlnodelist,以以下XML为例: <root> <lines> <line> <number>1</number> </line> <line> <number>2</number> </line> </lines> </root> XmlNodeList nodeList = doc.SelectNo

以以下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,2。我知道//查找xpath的第一个匹配项,但我觉得第一个匹配项应该是相对于节点本身的。即使在从子节点选择节点时,该行为似乎也会从根中找到第一个引用。这是微软想要的工作方式还是一个bug


是的,谢谢,但是删除斜杠和我的第二个例子一样有效

删除斜杠只起作用,因为
number
line
的直接子元素。如果它在层次结构中处于较低的位置:

<root>
  <lines>
    <line>
      <other>
        <number>1</number>
      </other>
    </line>
  </lines>
</root>

1.
您仍然需要使用
//number

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

XPath语法就是这样设计的/表示计算上下文是文档节点—XML文档的最外层节点
/
表示路径表达式的上下文是当前上下文节点

仔细想想,在任何上下文中都可以从整个文档中进行选择,这是非常有用的

这是微软想要的工作方式还是一个bug

微软正在实施XPath标准,是的,这是W3C希望XPath库工作的方式,它不是一个bug


是的,谢谢,但是删除斜杠和我的第二个例子一样有效

删除斜杠只起作用,因为
number
line
的直接子元素。如果它在层次结构中处于较低的位置:

<root>
  <lines>
    <line>
      <other>
        <number>1</number>
      </other>
    </line>
  </lines>
</root>

1.
您仍然需要使用
//number

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

XPath语法就是这样设计的/表示计算上下文是文档节点—XML文档的最外层节点
/
表示路径表达式的上下文是当前上下文节点

仔细想想,在任何上下文中都可以从整个文档中进行选择,这是非常有用的

这是微软想要的工作方式还是一个bug


Microsoft正在实施XPath标准,是的,W3C希望XPath库可以这样工作,这不是一个bug。

试试
//number
。这应该是从上下文节点进行搜索
/
用于整个文档搜索,而不是上下文。是的,谢谢,但删除斜杠和我的第二个示例一样有效。我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的。请尝试
//number
。这应该是从上下文节点进行搜索
/
用于整个文档搜索,而不是上下文。是的,谢谢,但删除斜杠和我的第二个示例一样有效。我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的。