如何将“foo”替换为“bar”?Nokogiri替换标签值
从
<h1>foo1<p>foo2<a href="foo3.com">foo4</a>foo5</p>foo6</h1>
到
<h1>bar1<p>bar2<a href="foo3.com">bar4</a>bar5</p>bar6</h1>
我只想要更换标签内内容,不标记属性。
任何想法?
如何将“foo”替换为“bar”?Nokogiri替换标签值
从
<h1>foo1<p>foo2<a href="foo3.com">foo4</a>foo5</p>foo6</h1>
到
<h1>bar1<p>bar2<a href="foo3.com">bar4</a>bar5</p>bar6</h1>
我只想要更换标签内内容,不标记属性。
任何想法?
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__
<h1>foo1<p>foo2<a href="foo3.com">foo4</a>foo5</p>foo6</h1>
我还以为foo.inner_html.gsub!(/foo/, "bar")
作品也许foo.inner_html = foo.inner_html.gsub(/foo/, "bar")
,但事实并非如此。
虚拟节点将使新文本节点与旧文本节点保持一致。
我能做
nokogiri_doc.css('p').each { |p| p.inner_html = p.inner_html.gsub(/\n/, "<br/>") }
要更换p标签内的\ n所有ocurrences为BR标签
这工作是更优雅。 – 2016-03-17 04:31:01
尼斯,聪明的形式给出了 – astropanic 2010-02-25 12:38:07