我需要提取2个<br>
标记之前的文本,即text 3
。代码类似于以下内容:
<div>
<br>
text1
<br>
text2
<br>
text3
<br>
<br>
text4
<br>
</div>
我尝试//div/text()[preceding-sibling::br]
,但是,它会提取所有文本。
答案 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]