2013-06-04 63 views
1

我想弄清楚如何打開一個XML文件,通過id搜索,替換節點中的值,然後重新保存文檔。用nokogiri更新節點打開xml文件並保存

我的XML

<?xml version="1.0"?> 
<data> 
    <user id="1370018670618"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370018701357"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370018769724"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370028546850"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370028588345"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
</data> 

我的代碼,打開,找到一個節點

xml_content = File.read("/home/mike/app/users.xml") 
doc = Nokogiri::XML(xml_content) 
node_update = doc.search("//user[@id='1370028588345'] //sent") 
node_update.inner_html ##returns value of "sent" 

部分在這其中,我被困在實際更新的節點。 node_update.inner_html = "true"inner_html上返回方法錯誤。然後保存更新的文件。

回答

8

首先,您的node_update實際上是NodeSet,而不是您認爲它的Node。你需要一個Node,如果你想打電話inner_html=它:

node_update[0].inner_html = 'true' 

然後寫出更新XML只是一個位標準文件的法操縱與to_xml電話結合:

File.open('whatever.xml', 'w') { |f| f.print(doc.to_xml) } 

另外,您的輸入不是有效的XML。你有一個</details>但沒有<details>

+0

哦哇。 node_update [0]是問題!感謝您的幫助。它一切都很完美。 我刪除了尾部。那是早期版本。 – dullmcgee

+0

工作很好,謝謝隊友 – cesarferreira