xhtml - Nokogiri 替换标签值

标签 xhtml data-structures string nokogiri

如何将“foo”替换为“bar”?

来自

<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/, "栏”),但事实并非如此。
虚拟节点是为了让新的文本节点与旧的文本节点合二为一。

关于xhtml - Nokogiri 替换标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2244539/

相关文章:

jquery - Google AJAX Feed API 将适用于博客文章

css - 使用 CSS 交换文本和图像顺序

c - c中的字符串数组声明

string - R将所有行转换为字符串

html - Web 应用程序和渲染

java - 使用richfaces和facelets开发.xhtml文件时如何删除Message Ui :include not found on java build path in eclipse,?

c# - 在服务器上实现 "Search nearby users"功能

c - 在 C 中定义类似 int 的类型

java - 在java结构中搜索数值

C++ 显示具有 vector 的 map