如何在Nokogiri中转储带有内联链接目标的文本节点?

时间:2012-07-05 14:00:21

标签: ruby nokogiri

我有一些HTML:

<span class="foo">foo bar <a href="http://example.com">example</a> baz</span>

我想把它变成一个字符串,如:

foo bar http://example.com baz

我正在使用Nokogiri,我有类似的东西:

doc.css('.foo').each do |message|
  message.css('a').map {|link| link.replace(link['href'])}
  message.xpath('.//text()').map do |m|
    p m.text
  end
end

但这似乎证明了:

foo bar
http://example.com
baz

我做错了什么?

1 个答案:

答案 0 :(得分:1)

p m.text将在每行文本后插入换行符,但文档本身没有任何换行符。只需打印出message.text,就可以得到你想要的东西。

require 'rubygems'
require 'nokogiri'

doc = Nokogiri::HTML.fragment(DATA.read)
doc.css('.foo').each do |message|
  message.css('a').each {|link| link.replace(link['href'])}
  puts message.text # prints "foo bar http://example.com baz"
end

__END__
<span class="foo">foo bar <a href="http://example.com">example</a> baz</span>