两个相似路径之间的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无关)。如果您想知道不同的查询结果,请也发布这些结果。如果您有一些预期的输出,也发布它(此处不适用)。如果问题被修改,我会很高兴地恢复否决票,但它肯定是不可回答的。我仍然没有在您的文档中看到任何文本节点。您查询的实际输入是什么?