2016-05-11 96 views
1

我的代碼中有一個Ruby哈希,我正在使用to_xml轉換爲XML。似乎一切都很好,除了API發送請求以要求選項連接到根節點。例如:Rails to_xml向根節點添加選項

request = { 
    "Header" => "", 
    "Body" => { 
    "GetOrders" => { 
     "workorderList" => { 
     "string" => "value" 
     }, 
     "clientID" => ENV['CLIENT_ID'], 
     "clientPassword" => ENV['CLIENT_PASSWORD'] 
    } 
    } 
} 

對此Ruby哈希調用to_xml將按照我的預期轉換XML。當我撥打to_xml時,我傳遞一個根選項。但是,如何將選項添加到根節點,以便代替看起來像這樣的根節點(來自.to_xml(root: 'Envelope')):<Envelope>它看起來像這樣<Envelope option="value">

我知道還有其他的寶石& XML構建器,但我只需要能夠簡單地將這些選項添加到XML的根節點。

這怎麼能在Ruby中快速完成& Rails?

回答

1

Rails的Hash#to_xml不屈服於塊:

request.to_xml do |options, key| 
    # options[:builder] gives the builder for the node 
end 

但我認爲你是超越了簡單的使用情況下,這種工具方法是專爲。

儘管可能使用它來添加屬性,但使用XML解析器可能會更簡單和更具前途 - Rails已包含Nokogiri

require 'nokogiri' 
doc = Nokogiri::XML(request.to_xml(root: 'Envelope')) 
doc.at_css('Envelope')['options'] = "value" 
doc.to_xml 
+0

感謝您的幫助。當我嘗試這樣做的時候,在'document.at_css()'行,我找回了'undefined method'[] ='for nil:NilClass' – Noah

+0

嗯,你是否試着查看XML輸出以確保有' '元素? – max

+0

從技術上講,它是'soapenv:信封',但是我做到了,它就在那裏。 – Noah