使用Nokogiri添加格式化的中断

时间:2012-11-23 15:04:00

标签: ruby nokogiri

我正在尝试向现有的XML文档添加一些元素。以下代码成功添加了所需的节点和内容,但它不会格式化插入的元素。所有添加的元素最终都在一行上,而不是在每个元素后面有换行符和缩进。

有关如何添加此格式的任何建议吗?

代码是:

doc.xpath("//tei:div[@xml:id='versionlog']", {"tei" => "http://www.tei-c.org/ns/1.0"}).each do |node|
  new_entry = Nokogiri::XML::Node.new "div", doc
  new_entry["xml:id"] = "v_#{ed_no}"
  head = Nokogiri::XML::Node.new "head", doc
  head.content = "Description of changes for #{ed_no}"
  new_entry.add_child(head)
  para = Nokogiri::XML::Node.new "p", doc
  para.content = "#{version_description}"
  new_entry.add_child(para)
  node.add_child(new_entry)
end

1 个答案:

答案 0 :(得分:1)

为什么XML不在一行上很重要?这是纯粹的化妆品,有着漂亮的印花" XML,重新加载XML时XML规范或解析器不需要XML。就个人而言,我建议您没有格式化传输速度和减小磁盘大小,但YMMV。

您可以通过XML美化器运行XML,也可以按照以下方式与Nokogiri玩游戏:

new_entry.add_child(para.to_xml + "\n")

换行符将作为标记之间的文本节点添加,但它对于XML提供其有效负载的能力并不重要。

如果你坚持," How do I pretty-print HTML with Nokogiri?"描述了如何到达那里。