20

我使用 Nokogiri 来解析具有相同内容的 html 页面:

<p class="parent">
  Useful text
  <br>
  <span class="child">Useless text</span>
</p>

当我调用方法时page.css('p.parent').textNokogiri 方法时,返回“有用的文本无用的文本”。但我只需要“有用的文字”。

如何获取没有孩子的节点文本?

4

2 回答 2

35

XPath 包括text()用于选择文本节点的节点测试,因此您可以这样做:

page.xpath('//p[@class="parent"]/text()')

如果所讨论的元素可能属于多个类,则使用 XPath 选择 HTML 类可能会变得非常棘手,因此这可能并不理想。

幸运的是 Nokogiri 将text()选择器添加到 CSS 中,因此您可以使用:

page.css('p.parent > text()')

获取作为p.parent. 这也将返回一些仅为空白的节点,因此您可能必须将它们过滤掉。

于 2013-08-27T17:02:44.143 回答
-1

您应该可以使用page.css('p.parent').children.remove.

然后您page.css('p.parent').text将返回没有子节点的文本。

注:page将由remove

于 2013-08-27T16:30:23.550 回答