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

Den*_*hin 19 ruby nokogiri

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

<p class="parent">
  Useful text
  <br>
  <span class="child">Useless text</span>
</p>
Run Code Online (Sandbox Code Playgroud)

当我打电话给方法时,page.css('p.parent').textNokogiri会返回'有用的文字无用的文字'.但我只需要'有用的文字'.

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

mat*_*att 28

XPath包括text()用于选择文本节点的节点测试,因此您可以执行以下操作:

page.xpath('//p[@class="parent"]/text()')
Run Code Online (Sandbox Code Playgroud)

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

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

page.css('p.parent > text()')
Run Code Online (Sandbox Code Playgroud)

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

  • text() 选择器似乎是最干净的解决方案。谢谢你! (2认同)