【问题标题】:Preserve newlines with Nokogiri使用 Nokogiri 保留换行符
【发布时间】:2012-05-12 03:22:05
【问题描述】:

我在 Rails 3 应用程序中使用 Nokogiri。它忽略了

<br/> 

标签。我想用“,”替换这些标签,因为它们代表地址中的换行符。我该怎么做呢?我尝试了以下方法,但似乎没有帮助:

  doc.inner_html.gsub!("<br/>", ", ")

【问题讨论】:

    标签: ruby-on-rails ruby nokogiri


    【解决方案1】:

    简单地说:

    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>
    

    如果您想更加小心并且只替换&lt;address&gt; 标记内的&lt;br&gt;(例如),那么:

    doc.css('address > br').each{ |br| br.replace ", " }
    

    【讨论】:

      【解决方案2】:

      这样设置内容:

      doc.inner_html = doc.inner_html.gsub("<br/>", ", ")  # using non-bang version
      

      【讨论】:

      • 这样做的问题是,如果我随后不能在 inner_html 上调用 Nokogiri 的核心函数(at_css、css 等),因为它是一个字符串。我需要能够去 doc.at_css 等,其中 doc 有修改的换行符。
      • 你应该可以做类似doc.at_css('header').inner_html.gsub("&lt;br/&gt;", ", ")
      • @Dty 在 inner_html 上调用 gsub 不会改变 DOM(也不会调用 gsub!)。您需要使用inner_html=,例如:head = doc.at_css('header'); head.inner_html = head.inner_html.gsub( /&lt;br\/?&gt;/, ', ')
      猜你喜欢
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2020-08-04
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多