2014-03-01 30 views
2

所有文字我的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 
+0

[Xpath深度最大的節點的字符串內容長於給定長度]的可能重複(http://stackoverflow.com/questions/4493323/xpath-deepest-node-whose-string-content-is-longer-than -a-給定長度的) –

回答

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() 

和像你正在尋找接收輸出。