通过Nokogiri扩展现有XML

时间:2012-07-18 14:00:17

标签: ruby xml nokogiri

我正在尝试扩展现有的XML文件并添加新节点。我正在加载包含很多产品的XML,添加一个新的并保存它。

我正在使用Nokogiri和Ruby 1.9.3。

这是我创造的最好的:

builder = Nokogiri::XML::Builder.new do
  root do
    load_xml = Nokogiri::XML(IO.read("test.xml"))
    parent.add_child(load_xml.root)
    data do
      name "Name"
    end
  end
end

file = File.open("test.xml",'w')
file.puts builder.to_xml
file.close

1 个答案:

答案 0 :(得分:5)

Nokogiri::XML::Builder实际上仅在创建新的XML文件时使用,而不是在编辑它们时使用。

此外,您的代码会加载XML并将其放入新的根节点(根),同时将新的子节点(数据节点)附加到该节点。这真的是理想的行为吗?

通常你会添加这样的节点:

doc = Nokogiri::XML(IO.read("test.xml"))
name_node = Nokogiri::XML::Node.new("name",doc)
name_node.content = "Name"
data_node = Nokogiri::XML::Node.new("data",doc)
data_node.add_child(name_node)
doc.root.add_child(data_node)

file = File.open("test.xml",'w')
file.puts doc.to_xml
file.close

这没有创建新的根节点,因为这似乎有点 我特有的......

您也可以尝试Nokogiri-Documentation,这是相当广泛的。

还有其他方法可以使用Nokogiri::XML::Builder来创建包含数据的所有内容,这将是这种组合方法的一个示例:

builder = Nokogiri::XML::Builder.new do
  data do 
    name "Name"
  end
end
doc = Nokogiri::XML(IO.read("test.xml"))
doc.root.add_child builder.doc.root

file = File.open("test.xml",'w')
file.puts doc.to_xml
file.close