0

我有这样的功能:

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 的值,但它正在向 xml 添加另一个 foo 节点。

[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>"
4

1 回答 1

0

Builder 似乎不支持您要查找的内容,生成的 XML 存储为字符串而不是节点或任何其他数据类型。

您应该重构您的代码,以便您希望在 XML 中呈现的数据至少在一个变量中进行管理,或者作为模型类或类集合进行管理;并将 XML 的表示与数据的存储和逻辑分开。

您还可以尝试另一个支持使用非字符串数据类型的 gem,例如GyokuNokogiri。例如,使用 Gyoku,您可以从普通的 ruby​​ 散列创建 XML,并在必要时简单地编辑散列中的值。您可以在任何时候使用Gyoku.xml(my_hash).

于 2012-09-20T01:35:40.243 回答