Ruby Nokogiri不应包含DOCTYPE

Ruby Nokogiri不应包含DOCTYPE,ruby,nokogiri,Ruby,Nokogiri,我正在尝试使用Nokogiri生成部分HTML文档,例如: html_content = Nokogiri::HTML::Builder.new() do |doc| # producing document here, redacted for brevity end.to_html 这就足够了,除了一个小问题:数据稍后将被发送到远程Drupal服务器,并作为页面的一部分呈现,因此不应该包含初始的声明 我如何说服Nokogiri不要生成DOCTYPE标记?或者说Nokogiri的HTML

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

html_content = Nokogiri::HTML::Builder.new() do |doc|
  # producing document here, redacted for brevity
end.to_html
这就足够了,除了一个小问题:数据稍后将被发送到远程Drupal服务器,并作为页面的一部分呈现,因此不应该包含初始的
声明

我如何说服Nokogiri不要生成
DOCTYPE
标记?或者说Nokogiri的HTML构建器是一种错误的方法


提前谢谢

要实现这一点,您可以使用以下方法:

require 'nokogiri'
include Nokogiri

fragment = HTML.fragment('')

HTML::Builder.with(fragment) do |f|
  f.div('foo')
end

fragment.to_html
# => <div>foo</div>
需要“nokogiri”
包括Nokogiri
fragment=HTML.fragment(“”)
HTML::Builder.with(fragment)do | f|
f、 分区(‘foo’)
结束
fragment.to_html
#=>foo

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>
需要“nokogiri”
目的地主机http://www.example.com/some/API/call'
HTML_模板=
# >>   
# >> 
#危险是我的中间名。
填充的数组和其他字段可以很容易地从CSV或YAML文件加载,从另一台主机动态检索JSON,或者直接从数据库调用加载

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

最困难的部分是定义如何循环文档中的各种标记,以填充内容或填充参数,但一旦完成,就很容易创建您填充并转发到其他内容的样板文件