使用 xpath 从 html 中提取嵌套文本

Extracting nested text from html using xpath

我正在尝试从看起来像这样的 html 页面中提取文本内容:

<div class="content">
    <div class="section">
      Lorem <a href="..." class="link">ipsum</a> 
      dolor <a href="..." class="link">sit</a> amet, 
      consectetur <a href="..." class="link">adipiscing</a> elit
    </div>

    <div class="section">
      sed do <a href="..." class="link">eiusmod</a> tempor 
      incididunt <a href="..." class="link">ut</a> labore 
      et <a href="..." class="link">dolore</a>
    </div>
</div>

我只想提取文本部分:

Lorem ipsum dolor amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore

我的 XPath (2.0) 表达式是 //*[contains(@class, 'section')]。当我使用 javax.xml.xpath.XPathExpression 评估它时,我只检索链接之外的文本:

Lorem dolor amet, consectetur elit, sed do tempor incididunt labore et

我以前没有用过XPath - 有没有更好的表达式来提取全文?谢谢。

您的表达式 returns 是一个完整的 XML 元素。然后你的处理器通过将 XML 元素转换为文本 returns 作为字符串,所以基本上与你执行的相同

//*[contains(@class, 'section')]/text()

相比之下,您可以使用 string() 函数获取子项中的所有文本元素:

//*[contains(@class, 'section')]/string()

正如 Mathias Müller 在评论中指出的,另一种方法是使用

//*[contains(@class, 'section')]//text()

其中 returns 所有后代或自身文本元素。