【问题标题】:Nokogiri should not include DOCTYPE [duplicate]Nokogiri 不应包括 DOCTYPE [重复]
【发布时间】:2013-11-25 22:29:02
【问题描述】:

我正在尝试使用 Nokogiri 生成部分 HTML 文档,例如类似于:

html_content = Nokogiri::HTML::Builder.new() do |doc|
  # producing document here, redacted for brevity
end.to_html

这很好用,除了一个小问题:数据稍后将被分派到远程 Drupal 支持的服务器并呈现为页面的一部分,因此 应该包含初始 <!DOCTYPE html ...>声明。

我将如何说服 Nokogiri 不要产生DOCTYPE 标签?还是 Nokogiri 的 HTML 构建器是错误的做法?

提前致谢。

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    要实现这一点,您可以使用document fragmentsBuilder.with 方法,如下所示:

    require 'nokogiri'
    include Nokogiri
    
    fragment = HTML.fragment('')
    
    HTML::Builder.with(fragment) do |f|
      f.div('foo')
    end
    
    fragment.to_html
    # => <div>foo</div>
    

    【讨论】:

      【解决方案2】:

      Nokogiri 让您可以轻松创建可以动态填充的模板;我会这样做:

      require 'nokogiri'
      
      DESTINATION_HOST = 'http://www.example.com/some/API/call'
      
      HTML_TEMPLATE = <<EOT
      <form method="post">
        <input name="user" type="text">
        <input name="desc" type="text">
      </form>
      <div id="quote">
      </div>
      EOT
      
      doc = Nokogiri::HTML::DocumentFragment.parse(HTML_TEMPLATE)
      
      doc.at('form')['action'] = DESTINATION_HOST
      doc.at('div').content = "Danger is my middle name."
      [
        ['user', 'Austin Powers'],
        ['desc', 'Man of Mystery'],
      ].each do |name, value|
        doc.at("input[name=\"#{name}\"]")['value'] = value
      end
      
      puts doc.to_html
      # >> <form method="post" action="http://www.example.com/some/API/call">
      # >>   <input name="user" type="text" value="Austin Powers"><input name="desc" type="text" value="Man of Mystery">
      # >> </form>
      # >> <div id="quote">Danger is my middle name.</div>
      

      填充的数组和其他字段可以轻松地从 CSV 或 YAML 文件、从另一台主机即时检索的 JSON 或直接从数据库调用加载。

      您事先知道文档的外观,因此请利用这些知识来创建模板。 Nokogiri 的构建器更适合那些您甚至不确定需要什么标签以及需要动态构建整个文档结构的时候。

      最难的部分是定义如何循环访问文档中的各种标签以填充内容或填写参数,但一旦完成,创建样板文件就很容易填写和转发到别的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        相关资源
        最近更新 更多