从最小长度的子节点获取所有文本

时间:2014-03-01 17:57:09

标签: html xpath

我有html:

<div>
 <div>text test <span>text aa bb</span></div>
 <p>text esa sssddf safdf <a href="">adsfdsf</a> sdf sdf</p>
 <p>text <a href="">adsfdsf</a> sdf
     <b>text esa sssddf safdf <a href="">adsfdsf</a> sdf sdf</b>
 </p>
</div>

不,我需要xpath来获取div和p元素的所有文本,这些元素的长度至少为20个字符。这可能吗?

现在我尝试//p/text()[string-length() > 20],但这不能正常使用

预期结果:

text test text aa bb
text esa sssddf safdf adsfdsf sdf sdf
text adsfdsf sdf text esa sssddf safdf adsfdsf sdf sdf

1 个答案:

答案 0 :(得分:0)

问题是例如<div>text test <span>text aa bb</span></div>有两个文本节点text testtext aa bb。使用当前查询,单个文本节点必须长于20个字符。

确定每个元素的字符串值的长度:

(//div|//p)[string-length(.) > 20]

这将返回一组符合谓词的节点及其元素。使用 XPath 1.0 ,没有机会将每个结果元素连接到单个字符串结果。不过,您可以使用您正在使用的语言在XPath之外进行此后处理。

使用 XPath 2.0 ,您可以执行以下操作:

(//div|//p)[string-length(.) > 20]/data()

并收到您正在寻找的输出。