Rails to_xml向根节点添加选项

时间:2016-05-11 20:44:39

标签: ruby-on-rails ruby xml

我的代码中有一个Ruby哈希,我使用to_xml转换为XML。一切似乎都很好,除了API我发送请求要求附加到根节点的选项。例如:

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

在这个Ruby哈希上调用to_xml可以像我期望的那样转换XML。当我调用to_xml时,我传递了一个root选项。但是,如何向根节点添加选项,以便代替看起来像这样的根节点(来自.to_xml(root: 'Envelope')):<Envelope>它看起来像<Envelope option="value">

我知道还有其他的宝石和XML构建器,但我只需要能够简单地将这些选项添加到XML的根节点。

如何在Ruby&amp;中快速完成导轨?

1 个答案:

答案 0 :(得分: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