我正在阅读以下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
可以正常工作)?
答案 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日),但我已经提交了反馈意见,应该对其进行更正,因此希望它将尽快得到解决。 >