【问题标题】:Using Nokogiri HTML Builder to create fragment with multiple root nodes使用 Nokogiri HTML Builder 创建具有多个根节点的片段
【发布时间】:2011-06-21 20:34:41
【问题描述】:

好吧,我对 Nokogiri 有一个简单的问题。我想让 Nokogiri::HTML::Builder 制作以下形式的 HTML 片段:

<div>
#Some stuff in here
</div>
<div>
#Some other stuff in here
</div>

尝试做的时候:

@builder = Nokogiri::HTML::Builder.new(:encoding => 'UTF-8') do |doc|
    doc.div {
      doc.p "first test"
    }
    doc.div {
      doc.p "second test"
    }
  end
@builder.to_html

我收到一个错误:Document has already a root node,我部分理解。我知道我没有将整个东西包装成标签(Nokogiri 期望它是 Nokogiri::HTML::Builder 从 Nokogiri::XML::Builder 继承的,并且 XML 文档必须有一个根节点)。但我不是在构建 XML 文档。

我错过了什么吗?非常感谢任何形式的帮助。

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    如您所述,Builder 不允许您构建具有多个根节点的 HTML 文档。您需要使用DocumentFragment

    @doc = Nokogiri::HTML::DocumentFragment.parse ""
    
    Nokogiri::HTML::Builder.with(@doc) do |doc|
        doc.div {
          doc.p "first test"
        }
        doc.div {
          doc.p "second test"
        }
    end
    
    puts @doc.to_html
    

    【讨论】:

    • +1 我不知道 Builder 可以接受任意文档。干得好。
    【解决方案2】:

    这是我为替换图像 src 属性所做的:

      doc = Nokogiri::HTML(html)
       doc.xpath("//img").each do |img|
         img.attributes["src"].value = Absolute_asset_path(img.attributes["src"].value)
      end
      doc.to_html     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多