【问题标题】:Extracting the full content of an html tag using Xpath使用 Xpath 提取 html 标记的全部内容
【发布时间】:2017-05-24 12:48:08
【问题描述】:

我有一组 html 页面(对此我没有任何控制权),需要将 li 标记的完整内容提取为单个文本块,包括空格和除 li 标记对之外的所有标记。我正在使用 HTML Xpath 解析器 1.0(对此没有选择。)

输入的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'] 得到我想要的文本,但带有开始和结束 li 标签。

.//*[@class='gs-source-item']//text() 将文本作为单独的元素(而不是作为单个元素)而不是内部标签。

string(.//*[@class='gs-source-item']//text()) 只获取第一行文本。

string-join(.//*[@class='gs-source-item']//text(),"") 对于我正在使用的解析器来说似乎不是可接受的语法,无论如何我认为它仍然会去除内部标签。

.//*[@class='gs-source-item']//node() 获取所有文本和标签,但不是单个块。

我已经没有想法可以尝试了...我查看了相关问题,但没有找到任何帮助(除了我上面列出的想法)。

【问题讨论】:

  • 试试//*[@class='gs-source-item']/* - 这会返回列表中元素的集合。
  • @tomredfern 返回内部标签的内容,但不返回顶级文本。
  • 对不起,我下次会正确阅读您的问题。

标签: html xpath


【解决方案1】:

没有将 HTML 标记作为文本返回的 XPath 函数。您没有提及您是否通过编程语言进行访问,但我会使用代码来执行此操作。

读入 HTML 源代码并手动解析。

【讨论】:

  • 不幸的是,这不是一个选择。但是, //node() 似乎确实返回了标签和文本;我只是不知道如何连接结果。
  • 可能用string-join()包围它?
  • 不幸的是,这不起作用(我坚持使用 Xpath 1.0,我认为 string-join 是 2.0?concat 也不起作用——因为节点集的字符串值是第一个节点的字符串值。
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多