“与”的区别是什么;“元素”;及//“元素”;在XPath中?

“与”的区别是什么;“元素”;及//“元素”;在XPath中?,xpath,Xpath,我正在阅读XPath示例:我想知道这两个表达式之间的区别: author All <author> elements within the current context. //author All <author> elements in the document. 作者 全部 为什么author没有像我预期的那样返回任何内容(但是//author工作)?“element”选择当前节点名为“element”的所有直接子节点,并且与“/element”相同 “//el

我正在阅读XPath示例:我想知道这两个表达式之间的区别:

author
All <author> elements within the current context.

//author
All <author> elements in the document.
作者
全部

为什么
author
没有像我预期的那样返回任何内容(但是
//author
工作)?

element
”选择当前节点名为“element”的所有直接子节点,并且与“
/element
”相同

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

要完成列表,请执行以下操作:

//element
”将选择当前节点下任意深度的“element”子节点

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

至于“
author
”找不到任何东西:首先需要在根节点级别。“
/root/author
”将获得所需的节点,或者首先选择“
/root
”,然后可以从中选择“
author

作为相对XPath表达式,
author

当前上下文中的所有
元素

是错误的。应该说,

当前上下文节点的所有子元素

//author
确实会选择文档中的所有
元素,因为
/
会沿着
子体或self
轴进行选择

author
没有为XML文档选择任何内容的原因是,当上下文节点设置为文档根时,必须包含
root/author
来选择
的子元素
,或者只包含
root
来选择
元素本身


1截止到今天2018-06-24,但我已经提交了反馈,认为它应该得到纠正,因此希望它很快会得到修复。

我认为在评估XML文档时,如果我不指定起始节点,它将从根节点开始?如果不是从根节点开始,那么在哪里?@Chin:No,没有前导的
/
,XPath表达式是相对于当前上下文节点的。这一事实可能导致了您的误解。根节点(在我的示例中是
)不也是文档节点吗?那么,当我们评估XML时,它不也是上下文节点吗?在这种情况下,
是其子节点之一,因此
作者
表达式应该能够返回
节点,不是吗?我理解错了什么?@Chin:不,你的
根元素是document元素。另一方面,树是树的根。根节点只作为树的根节点出现。文档元素的元素节点是根节点的子节点。根节点还具有子处理指令和注释节点,用于处理prolog中以及文档元素末尾之后出现的指令和注释。
<root>
    <author>
        <first-name></first-name>
    </author>
</root>