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

时间:2015-01-16 08:00:13

标签: java html 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 - 是否有更好的表达式来提取全文?感谢。

1 个答案:

答案 0 :(得分:3)

您的表达式返回一个完整的XML元素。然后,处理器通过将XML元素转换为文本将其作为字符串返回,因此基本上与执行时相同

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

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

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

另一种方式,正如MathiasMüller在评论中指出的那样,将使用

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

返回所有后代或自我文本元素。