ruby - Nokogiri 替换 HTML 的 strip 内容

标签 ruby encoding utf-8 html-parsing nokogiri

我想从一些 HTML 中删除一个标签,而不去除任何标记的剩余内容。例如,我有一个文件,test.html:

<p class="P1"><span class="T2">Some text, goes to uppercase</span>
<p class="P4"><span class="T4"> </span><span class="T3">other text</span>
<span class="T5">italics</span><span class="T3">‘more text with UTF-8 ’</span>
</p></p>

我想得到以下输出:

SOME TEXT, GOES TO UPPERCASE
other text
<em>italics<em> ‘more text with UTF-8 ’

我的代码是:

f = File.open('raw/test.html',"r")
doc = Nokogiri::XML::DocumentFragment.parse(f.read.encode('UTF-8'))
f.close

doc.css("span.T2").each do |span|
  span.replace span.content.upcase
end
doc.css("span.T5").each do |span|
  span.replace "<em>"+span.content+"</em>"
end
doc.css("span").each do |span|
  span.replace span.content
end
doc.css("p").each do |p|
  p.replace Nokogiri::XML::Text.new(p.inner_html, p.document)
end

f = File.open('processed/test.html',"w")
f.write(doc)
f.close

我得到的输出是:

SOME TEXT, GOES TO UPPERCASE
&lt;p class="P4"&gt;
 other text
&lt;em&gt;italics &lt;/em&gt;&amp;#x2018;more text with UTF-8 &amp;#x2019;
&amp;#x2018;our common mother&amp;#x2019;
&lt;/p&gt;

非常感谢。

更新

解决方法如下:

coder = HTMLEntities.new 
f = File.open('raw/test.html',"r") 
doc = Nokogiri::XML::DocumentFragment.parse(f.read.encode('UTF-8')) 
f.close 
doc.css("p").each do |p| 
  p.replace p.inner_html 
end 

doc.css("span.T2").each do |span| 
  span.replace span.content.upcase 
end 

doc.css("span.T5").each do |span| 
  span.replace "<em>"+span.content+"</em>" 
end 

doc.css("span").each do |span| 
  span.replace span.inner_html 
end 

f = File.open('processed/test.html',"w") 
f.write(coder.decode(doc)) 
f.close

最佳答案

使用 span.replace "<em>"+span.content+"</em>"不正确。您需要告诉 Nokogiri 替换为 HTML,而不是文本。例如:

span.inner_html = "<em>"+span.content+"</em>"

结果:

<span class="T5"><em>italics</em></span>

关于ruby - Nokogiri 替换 HTML 的 strip 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307622/

相关文章:

ruby-on-rails - 在 Rails 中跟踪依赖加载

ruby - ruby 有 getlocale 方法吗?

c++ - 将字符串从 UTF-8 转换为 ISO-8859-1

python - 如何修复 Python Mechanize 中的编码?

python - 将 UTF-16 转换为 UTF-8

php - 阿拉伯文本在 php/mysql 中有时会出现 “???” 有时会在 select/insert 语句后出现 "Ùؤتا"

ruby - 使用 mongomapper 保存日期/时间

Ruby off Rails FactoryGirl ArgumentError : wrong number of args (0 for 1)

javascript 不转换特殊字符

python - 具有适当 unicode 支持的图表