两个相似路径和其他问题之间的XPath差异

时间:2016-03-04 09:13:37

标签: xpath

我要做一些练习但是 我真的不明白两个相似路径之间的区别

我有树:

<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()返回最后一个“节点” - &gt;文本节点?

另一个问题: 为什么// p [1]返回每个“节点”,第一个“p”子节点?     - &GT;我有两个结果

<b>
   <t></t> 
   <a>
      <n></n>
      **<p></p>**
      <p></p>
   </a> 
   <a>
      <n></n>
      **<p></p>**
   </a> 
   <a></a> 
</b>

为什么答案不是整个文档的第一个“p”节点?

谢谢大家!

1 个答案:

答案 0 :(得分:0)

  

1://a//text()和2://a/text()

之间的区别

让我们分解://a选择所有a元素,无论它们在文档中的位置。假设您有/a,它将选择所有根a元素。

如果/路径表达式位于XPath表达式中的另一个元素之后,它将在XPath表达式中选择直接降序元素之前的元素(即子元素)。

如果//路径表达式位于XPath表达式中的另一个元素之后,它将选择前一个元素后代的所有元素,无论它们在前一个元素下的位置。

应用于两个XPath表达式:

  1. //a//text():选择所有a元素,无论它们在文档中的位置,对于这些元素,无论text()位于a下,都选择//a/text()选择了元素。

  2. a:选择所有text()元素,无论它们在文档中的位置,对于这些元素,请选择任何直接后代//p[1]

  3.   

    为什么//a/p[1]会返回每个&#34;一个节点&#34;,第一个&#34; p&#34;子节点?

    假设您要编写p,这将选择文档中任何位置的任何a元素的第一个//p[1]子元素。通过编写p,您省略了显式父元素,但谓词仍然选择a元素所具有的任何父元素的第一个子元素。

    在这种情况下,有两个父p元素,为其选择了第一个into()子元素。

    在您最喜欢的搜索引擎上搜索XPath的良好介绍会很好。我总是发现this one from w3schools.com是个好人。