我正在尝试向现有的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
答案 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?"描述了如何到达那里。