Xpath在2个标签之前获取数据

时间:2016-04-16 14:05:36

标签: html xpath

我需要提取2个<br>标记之前的文本,即text 3。代码类似于以下内容:

<div>
    <br>
    text1
    <br>
    text2
    <br>
    text3
    <br>
    <br>
    text4
    <br>
</div>

我尝试//div/text()[preceding-sibling::br],但是,它会提取所有文本。

1 个答案:

答案 0 :(得分:4)

在这种情况下找到2个连续<br>的结果比我想象的要复杂,因为这里需要忽略空文本节点(只包含空格的节点)。这是一种方式:

/br[
    following-sibling::node()[self::*|self::text()[normalize-space()]
  ][1][self::br]]

第一个谓词找到以下兄弟节点,哪个类型是元素节点(self::*)或非空文本节点(self::text()[normalize-space()])。然后[1]仅获取第一个找到的节点,最后[self::br]验证找到的节点是<br>

完整的XPath表达式如下:

//div
 /br[
    following-sibling::node()[self::*|self::text()[normalize-space()]
  ][1][self::br]]
 /preceding-sibling::text()[1]