两个相似路径之间的XPath差异及其他问题
我得做些练习,但是 我真的不明白两条相似路径之间的区别 我有一棵树:两个相似路径之间的XPath差异及其他问题,xpath,Xpath,我得做些练习,但是 我真的不明白两条相似路径之间的区别 我有一棵树: <b> <t></t> <a> <n></n> <p></p> <p></p> </a> <a> <n></n> <p></p> </a&
<b>
<t></t>
<a>
<n></n>
<p></p>
<p></p>
</a>
<a>
<n></n>
<p></p>
</a>
<a></a>
</b>
我们期望每个最终标记包含一个文本节点
我必须解释一下//a//text()和//a/text()之间的区别
我看到//a//text()返回所有文本节点,这似乎是合法的,
但是为什么//a/text()返回最后一个“a节点”->text节点
另一个问题:
为什么//p[1]返回每个“a节点”,即第一个“p”子节点?
->我有两个结果
<b>
<t></t>
<a>
<n></n>
**<p></p>**
<p></p>
</a>
<a>
<n></n>
**<p></p>**
</a>
<a></a>
</b>
** **
** **
为什么答案不是整个文档的第一个“p”节点
谢谢大家
1://a//text()
和2://a/text()
让我们将其分解:/a
选择所有a
元素,无论它们在文档中的什么位置。假设您有/a
,它将选择所有根a
元素
如果/
路径表达式位于XPath表达式中的另一个元素之后,它将直接选择XPath表达式中该元素之前的元素(即子元素)
如果路径表达式位于XPath表达式中的另一个元素之后,则它将选择前一个元素的后代的所有元素,无论它们位于前一个元素下的何处
应用于两个XPath表达式:
//a//text()
:选择所有a
元素,无论它们在文档中的何处;对于这些元素,选择text()
,无论它们在所选a
元素下的何处//a/text()
:选择所有a
元素,无论它们在文档中的何处,并为这些元素选择任何直接后代text()
//p[1]
为每个“a节点”返回第一个“p”子节点
假设您要编写//a/p[1]
,这将选择文档中任何a
元素的第一个p
子元素。通过编写//p[1]
可以省略显式父元素,但谓词仍然选择p
元素所具有的任何父元素的第一个子元素
在这种情况下,有两个父a
元素,第一个p
子元素被选中
在您最喜欢的搜索引擎上搜索XPath的详细介绍会很好。我总是觉得自己是个不错的人。我因为几个原因否决了你的问题:输入错误(根本没有文本节点?),使用不相关的标记(似乎与纯XPath无关)。如果您想知道不同的查询结果,请也发布这些结果。如果您有一些预期的输出,也发布它(此处不适用)。如果问题被修改,我会很高兴地恢复否决票,但它肯定是不可回答的。我仍然没有在您的文档中看到任何文本节点。您查询的实际输入是什么?