require 'rubygems'
require 'nokogiri'
doc = Nokogiri::HTML(DATA)
doc.xpath('//text()').each {|foo|
dummy = foo.add_previous_sibling(Nokogiri::XML::Node.new("dummy", doc))
dummy.add_previous_sibling(Nokogiri::XML::Text.new(foo.to_s.gsub(/foo/, "bar"), doc))
foo.remove
dummy.remove
}
puts doc
__END__
foo1
foo2foo4foo5
foo6
I would have thought foo.inner_html.gsub!(/foo/, "bar")
works or maybe foo.inner_html = foo.inner_html.gsub(/foo/, "bar")
, but it doesn't.
The dummy node is to keep the new text node becoming one with the old text node.