2016-04-16 77 views
0

我需要提取2 <br>标签之前的文本,即text 3。该代码是类似如下:Xpath获取数据之前2 <br>标签

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

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

回答

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] 
+0

再次感谢,我从来没有想过的XPath相结合的。也感谢你的解释。 – neenkart

相关问题