我需要提取 2 个<br>
标签之前的文本,即text 3
. 该代码类似于以下内容:
<div>
<br>
text1
<br>
text2
<br>
text3
<br>
<br>
text4
<br>
</div>
Run Code Online (Sandbox Code Playgroud)
我试过//div/text()[preceding-sibling::br]
,但是,它提取了所有的文本。
<br>
在这种情况下找到 2 个连续的s 比我预期的要棘手,因为这里需要忽略空文本节点(仅由空格组成的节点)。这是一种方式:
/br[
following-sibling::node()[self::*|self::text()[normalize-space()]
][1][self::br]]
Run Code Online (Sandbox Code Playgroud)
第一个谓词查找以下兄弟节点,其类型为元素节点 ( 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]
Run Code Online (Sandbox Code Playgroud)