使用nokogiri builder添加dtd

par*_*tic 4 ruby xml dtd nokogiri

nokogiri用来生成svg图片.我想添加正确的xml前导码和svg DTD声明来得到类似的东西:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg>
...
Run Code Online (Sandbox Code Playgroud)

随着builder我可以使用instruct!declare!,但我想坚持nokogiri,因为我在我的项目中使用它的其他用途,我想留在低要求.你有什么想法吗?

谢谢

Eri*_*ker 5

以下是来自Nokogiri :: XML :: Builder页面底部的注释(可能最近添加),我认为这样做可以解决问题:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.doc.create_internal_subset(
    'html',
    "-//W3C//DTD HTML 4.01 Transitional//EN",
    "http://www.w3.org/TR/html4/loose.dtd"
  )
  xml.root do
    xml.foo
  end
end

puts builder.to_xml
Run Code Online (Sandbox Code Playgroud)


小智 2

您现在可以(不知道从哪个版本)使用 Node#create_internal_subset 来创建 DTD 节点。欲了解更多信息,请参阅:http://nokogiri.org/Nokogiri/XML/Builder.html

向下滚动到“文档类型”部分以获取示例。