<Document>
<A>
<B>
<C></C>
</B>
</A>
<E>
<F>
<C></C>
</F>
<G>
<C></C>
</G>
</E>
</Document>
Run Code Online (Sandbox Code Playgroud)
如果我将上述XML加载到XmlDocument并使用XPath查询在C上执行SelectSingleNode // C
XmlNode oNode = oDocument.SelectSingleNode("E"); XmlNodeList oNodeList = oNode.SelectNodes("//C");
为什么它会从Under B返回节点,而我预期会发生它只会从E下返回节点
合理?
编辑:我怎么才能让它从那个节点开始返回?
Jef*_*tes 11
指定.//C
将实现您想要的,否则,XPath从文档根而不是当前节点开始.
的混乱是在定义//
从XPath标准如下:
//是/ descendant-or-self :: node()/的缩写.例如,// para是/ descendant-or-self :: node()/ child :: para的缩写,因此将选择文档中的任何para元素(甚至作为文档元素的para元素将由/选择)/para,因为document element节点是根节点的子节点); div // para是div/descendant-or-self :: node()/ child :: para的缩写,因此将选择div children的所有para后代.
因为它是文档级别的//
简称,/descendant-or-self::node()/
除非您在开始时指定一个节点.