2017-03-08 99 views
0

我試圖在這裏無處不在,但似乎我無法弄清楚爲什麼我的輸出不起作用。 下面是代碼:如何在XPath中的2個h2標籤之間提取多個文本行?

<h2> Title1 </h2> 
" 
Text 1" 
<br> 
" 
Text 2" 
<br> 
" 
Text 3 
" 
<h2> Title2 </h2> 

我想提取文本1個文本2文本3,但與下面的XPath,這是行不通的......

text()[preceding-sibling::h2[normalize-space()='Title1']] 

你能幫幫我嗎?

在此先感謝!

+1

不使用XPath的HTML,使用jsoup。 html是一個討厭的生物,充滿了xpather的痛苦和折磨。 – MeBigFatGuy

+0

順便說一句,h2不是它的父母的文本的兄弟姐妹。 – MeBigFatGuy

回答

0

你的情況,你可以使用

//h2[normalize-space(text())="Title1"]/following-sibling::text()[position()<4] 

,但它只能用於當前提供HTML樣品適用:如果可以有或多或少<br>"TextN"部分 - 它不會匹配預期的文本內容...

+0

這個工作嗎? – becixb

+0

nope結果與我的一樣,只是Text1會出現 – retroldschool

+0

這可能是因爲你簡化的'html'樣例結構不同於原來的 – Andersson

0

這是一種可能的方式:

//h2[normalize-space() = 'Title1'] 
/following-sibling::text()[ 
    following-sibling::h2[1][normalize-space() = 'Title2'] 
] 

demo

簡要說明:

  • //h2[normalize-space() = 'Title1']:找到h1元素,其中的文字內容,whitespaces normalization後,等於 '標題1'
  • /following-sibling::text():從這樣h1元素,找到所有下面的兄弟文本節點...
  • following-sibling::h2[1][normalize-space() = 'Title2']:...其中最近以下同級h2含量等於 '標題2'
+0

感謝您的評論har07,但它也不管用......它只是顯示Text1而不是所有的文本。 – retroldschool