XPath中的“元素”和“ //元素”有什么区别?

时间:2018-06-24 06:11:20

标签: xpath

我正在阅读以下XPath示例:https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx,并且我想知道这两个表达式之间的区别:

author
All <author> elements within the current context.

//author
All <author> elements in the document.

这两种情况有什么区别?如果“当前上下文”是根节点,那会使两者相等吗?

对于这个简单的XML文件:

<root>
    <author>
        <first-name></first-name>
    </author>
</root>

我在此网站https://www.freeformatter.com/xpath-tester.html上尝试过

为什么author不返回我期望的任何内容(但是//author可以正常工作)?

2 个答案:

答案 0 :(得分:2)

element”选择当前节点的所有名为“ element”的直接子节点,这些子节点与“ ./element”相同。

//element”从根开始选择任何深度的所有“元素”节点(忽略当前节点)。

并完成列表:

.//element”将在任意深度选择当前节点下方的“ element”子级。

/element”仅在根级别进行搜索(在您的示例中,您将需要“ / root”来获取任何内容)。

至于“ author”什么也没找到:您首先需要处于根节点的级别。 “ /root/author”将获取您想要的节点,或者首先选择“ /root”,然后从中选择“ author”。

答案 1 :(得分:1)

相对XPath表达式author的{​​{3}},

  

当前上下文中的所有<author>元素。

错误 1 。它应该说,

  

当前上下文 节点 中的所有<author> 个元素。

//author实际上将选择文档中的所有<author>元素,因为//沿descendant-or-self轴进行选择。

author没有为XML文档选择任何内容的原因是,在上下文节点设置为文档根目录的情况下,您必须包含root/author才能选择<author> <root>root的子元素来选择<root>元素本身。

1 截至今天(2018年6月24日),但我已经提交了反馈意见,应该对其进行更正,因此希望它将尽快得到解决。