C# XMLNodeList奇怪的行为
以以下XML为例: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
<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语法就是这样设计的/
表示路径表达式的上下文是当前上下文节点
仔细想想,在任何上下文中都可以从整个文档中进行选择,这是非常有用的
这是微软想要的工作方式还是一个bug
微软正在实施XPath标准,是的,这是W3C希望XPath库工作的方式,它不是一个bug
是的,谢谢,但是删除斜杠和我的第二个例子一样有效 删除斜杠只起作用,因为
number
是line
的直接子元素。如果它在层次结构中处于较低的位置:
<root>
<lines>
<line>
<other>
<number>1</number>
</other>
</line>
</lines>
</root>
1.
您仍然需要使用//number
我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的
XPath语法就是这样设计的/
表示路径表达式的上下文是当前上下文节点
仔细想想,在任何上下文中都可以从整个文档中进行选择,这是非常有用的
这是微软想要的工作方式还是一个bug
Microsoft正在实施XPath标准,是的,W3C希望XPath库可以这样工作,这不是一个bug。试试
//number
。这应该是从上下文节点进行搜索/
用于整个文档搜索,而不是上下文。是的,谢谢,但删除斜杠和我的第二个示例一样有效。我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的。请尝试//number
。这应该是从上下文节点进行搜索/
用于整个文档搜索,而不是上下文。是的,谢谢,但删除斜杠和我的第二个示例一样有效。我只是认为,如果您在节点中搜索节点,那么//将返回到整个文档,这是令人困惑的。