【问题标题】:How to get node text without children?如何获取没有孩子的节点文本?
【发布时间】:2013-08-30 12:13:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • text() 选择器似乎是最干净的解决方案。谢谢!
    【解决方案2】:

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

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

    注意:page 将被remove 修改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多