使用XPath选择除最后一个节点之外的所有文本

时间:2014-04-21 09:24:14

标签: html xpath

是否有任何XPath模式可以选择除最后一个节点之外的所有html代码? 例如,假设我想要除this HTML code中的最后一个之外的所有段落: 我尝试了这些在表达式中返回空值或错误的模式(我使用HAP Testbed v1.1.0.0来测试HTML代码上的模式):

  • //body//p[last()] != true
  • not(//body//p[last()])
  • //body//not[p[last()]]
  • 等...

问题:

  • not()函数是否返回布尔值? - 如果没有,我怎样才能将它用于我的目的?
  • 除最后一个节点外,还有其他方法可以获取所有文本吗?

2 个答案:

答案 0 :(得分:4)

如果路径表达式exp选择了一组节点,则可以使用(exp)[position() != last()]选择节点集中除最后一个节点外的所有节点。所以使用(//p)[position() != last()]。如果您不在//p[position() != last()]中使用括号,则可以选择/descendant-or-self::node()/p[position() != last()],这将选择不是其父母中最后p个孩子的所有p个元素。所以在

的情况下
<root>
  <div>
    <p>1</p>
    <p>2</p>
  </div>
  <div>
    <p>3</p>
    <p>4</p>
  </div>
</root>

该路径(//p)[position() != last()]选择前三个p元素,而//p[position() != last()]将选择第一个和第三个p元素。

答案 1 :(得分:0)

要获取除最后一个之外的所有p标签并选择其文本,您可以使用

//p[position()<last()]//text()
确实not(...)在返回布尔值的条件中使用a function