2017-05-24 62 views
2

我有一組html頁面(通過它我沒有任何控制),需要將li標記的完整內容作爲包含空格的單個文本塊來提取以及除li標籤對以外的所有標記。我使用的HTML解析器的XPath 1.0(並且沒有對這樣的選擇。)使用Xpath提取html標記的完整內容

輸入HTML看起來像

<ul class="gs-source-list"> 
 
<li id="s1" class="gs-source-item"> 
 
[S1] First text here 
 
<br/> 
 
<br/> 
 
Label: 
 
<br/> 
 
<br/> 
 
<span style="display:inline-block; margin-left:35px;"> 
 
More text 
 
<br/> 
 
More text 
 
<br/> 
 
</span> 
 
<br/> 
 
<br/> 
 
Note: 
 
<br/> 
 
<br/> 
 
<span style="display:inline-block; margin-left:35px;">GRO reference is Note text</span> 
 
</li> 
 
</ul> 
 

 

.//*[@class='gs-source-item']讓我我想要的文字,但與開放和關閉李標籤。

.//*[@class='gs-source-item']//text()請將文本作爲單獨的元素(而不是單個元素)而不是內部標籤。

string(.//*[@class='gs-source-item']//text())只讓我看到第一行文字。

string-join(.//*[@class='gs-source-item']//text(),"")似乎並不是我正在使用的解析器的可接受語法,無論如何,我認爲它仍然會去掉內部標籤。

.//*[@class='gs-source-item']//node()得到我所有的文本和標籤,但不是作爲一個單獨的塊。

我已經用盡想法嘗試...我已經看過相關的問題,但沒有找到任何幫助(除了我上面列出的想法)。

+0

嘗試'/ * * [@ class ='gs-source-item']/*' - 這會返回列表中元素的集合。 –

+0

@tomredfern返回內部標籤的內容,但不是頂級文本。 – ColeValleyGirl

+0

抱歉,我會在下次正確閱讀您的問題。 –

回答

0

沒有XPath函數將HTML標記作爲文本返回。你不會提到你是否通過編程語言訪問,但我會使用代碼來執行此操作。

閱讀HTML源代碼並手動解析。

+0

不幸的是,這不是一個選項。但是,// node()確實會返回標籤以及文本;我只是不能解決如何連接結果。 – ColeValleyGirl

+0

可能通過將其與[string-join()](https://www.w3schools.com/xml/xsl_functions.asp#string)相提並論? –

+0

不幸的是,這不起作用(我與Xpath 1.0卡住了,我認爲string-join是2.0?concat也不起作用 - 因爲節點集的字符串值是字符串的字符串值第一個節點。 – ColeValleyGirl

相關問題