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

时间:2013-08-27 16:14:53

标签: ruby nokogiri

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

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

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

如何在没有孩子的情况下获取节点文本?

2 个答案:

答案 0 :(得分:27)

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

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

如果相关元素可能属于多个类,则使用XPath选择HTML类会变得相当棘手,因此这可能不太理想。

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

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

获取p.parent的直接子节点的文本节点。这也会返回一些只有空格的节点,因此您可能需要将它们过滤掉。

答案 1 :(得分:-1)

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

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

注意:page将修改remove