【发布时间】:2012-05-12 03:22:05
【问题描述】:
我在 Rails 3 应用程序中使用 Nokogiri。它忽略了
<br/>
标签。我想用“,”替换这些标签,因为它们代表地址中的换行符。我该怎么做呢?我尝试了以下方法,但似乎没有帮助:
doc.inner_html.gsub!("<br/>", ", ")
【问题讨论】:
标签: ruby-on-rails ruby nokogiri
我在 Rails 3 应用程序中使用 Nokogiri。它忽略了
<br/>
标签。我想用“,”替换这些标签,因为它们代表地址中的换行符。我该怎么做呢?我尝试了以下方法,但似乎没有帮助:
doc.inner_html.gsub!("<br/>", ", ")
【问题讨论】:
标签: ruby-on-rails ruby nokogiri
简单地说:
doc.css('br').each{ |br| br.replace ", " }
实际操作:
require 'nokogiri'
doc = Nokogiri.HTML('<address>900 Magnolia Road<br/>Nederland, CO<br/>80466</address>')
puts doc.root
#=> <html><body><address>900 Magnolia Road<br>Nederland, CO<br>80466</address></body></html>
doc.css('br').each{ |br| br.replace ", " }
puts doc.root
#=> <html><body><address>900 Magnolia Road, Nederland, CO, 80466</address></body></html>
如果您想更加小心并且只替换<address> 标记内的<br>(例如),那么:
doc.css('address > br').each{ |br| br.replace ", " }
【讨论】:
这样设置内容:
doc.inner_html = doc.inner_html.gsub("<br/>", ", ") # using non-bang version
【讨论】:
doc.at_css('header').inner_html.gsub("<br/>", ", ")
gsub 不会改变 DOM(也不会调用 gsub!)。您需要使用inner_html=,例如:head = doc.at_css('header'); head.inner_html = head.inner_html.gsub( /<br\/?>/, ', ')