2017-05-24 167 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

相关问题