2012-09-19 114 views
0

我有一個功能,像這樣:如何修改以前在Ruby中設置的XML節點?

def add_auth_fields 
    xml = Builder::XmlMarkup.new(:target => '') 
    xml.instruct! :xml 

    xml.inquiry do |inquiry| 
     inquiry.authentication do |auth| 
     auth.username USERNAME 
     auth.password PASSWORD 
     end 
    end 

    xml 
end 

我怎樣才能在以後的時間來添加節點內部多個數據訪問xml.inquiry節點?

如果我再次打電話xml.inquiry do |inquiry|,它只是添加另一個節點到我的XML。

這裏是另一個例子,我想改變foo的值,但是它將另一個foo節點添加到xml中。

[195] pry(main)> xml_markup = Builder::XmlMarkup.new 
=> <pretty_inspect/> 

[196] pry(main)> xml_markup.foo 'bar' 
=> "<pretty_inspect/><foo>bar</foo>" 

[197] pry(main)> xml_markup.foo 'test' 
=> "<pretty_inspect/><foo>bar</foo><foo>test</foo>" 

回答

0

構建程序似乎不支持您要查找的內容,生成的XML存儲爲字符串而不是節點或任何其他數據類型。

您應該重構代碼,以便您希望在XML中呈現的數據至少在變量中管理,或作爲模型類或類集合進行管理;並將XML的表示與數據的存儲和邏輯分開。

您也可以嘗試另一個支持使用非字符串數據類型的gem,例如GyokuNokogiri。例如,使用Gyoku,您可以使用普通的紅寶石哈希創建XML,並在必要時編輯哈希中的值。您可以使用Gyoku.xml(my_hash)在任意點輸出當前的XML字符串。

相關問題