2012-07-18 35 views
0

我試圖擴展一個現有的XML文件並添加一個新節點。我正在加載包含很多產品的XML,添加一個新的並保存它。由Nokogiri擴展現有的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 

回答

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 
+0

你好,謝謝你。這正是我所需要的,並且我試圖去做。這是官方nokogiri教程更好的例子。 再次感謝你:) – jirikolarik 2012-07-18 18:11:47