ruby - Nokogiri 在段落中查找文本

标签 ruby string nokogiri

我想替换 XHTML 文档中所有段落中的 inner_text。

我知道我可以像这样使用 Nokogiri 获取所有文本

doc.xpath("//text()")

但我只想对段落中的文本进行操作,如何在不影响链接中最终存在的 anchor 文本的情况下选择段落中的所有文本?

#For example : <p>some text <a href="/">This should not be changed</a> another one</p>

最佳答案

对于段落的直接子文本,使用//p/text()

irb> h = '<p>some text <a href="/">This should not be changed</a> another one</p>'
=> ...
irb> doc = Nokogiri::HTML(h)
=> ...
irb> doc.xpath '//p/text()'
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">]

对于作为段落后代(直接或非直接)的文本,使用//p//text()。要排除那些将 anchor 作为父级的文本,您可以将它们减去。

irb> doc.xpath('//p//text()') - doc.xpath('//p//a/text()')
=> [#<Nokogiri::XML::Text:0x80ac2e04 "some text ">, #<Nokogiri::XML::Text:0x80ac26c0 " another one">]

可能有一种方法可以一次调用完成,但我的 xpath 知识还不够深入。

关于ruby - Nokogiri 在段落中查找文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793624/

相关文章:

ruby - Nokogiri xpath - 根据属性条件计算 XML 元素的出现次数

ruby - 使用 nokogiri 解析此页面的最佳方法是什么?

ruby-on-rails - 使用 Rails 3 的自定义守护进程

ruby-on-rails - RSpec 未加载 ControllerMacros 方法

Ruby:下面的 "sort"方法有没有更好的写法?

ruby - CSV - 处理某些字段具有相同值的每组连续行

c++ - 你能复制一个方法的内容到 StringStream 中吗?

c++ - 我可以用 2 个字符替换字符串中的单个字符吗?

javascript - 检查字符串是否包含计算

html - 使用 Ruby 从 HTML 文档中剥离文本