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の値を変更したい別の例ですが、代わりに、別の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>"
4

1 に答える 1

0

Builderは、探しているものをサポートしていないようです。生成されたXMLは、ノードやその他のデータ型ではなく、文字列として保存されます。

XMLで提示したいデータが少なくとも変数で管理されるように、またはモデルクラスまたはクラスのコレクションとして管理されるように、コードをリファクタリングする必要があります。XMLの表示を、データのストレージおよびロジックから分離します。

また、 GyokuNokogiriなど、文字列以外のデータ型での作業をサポートする別のgemを試すこともできます。たとえば、Gyokuでは、プレーンなルビーハッシュからXMLを作成し、必要に応じてハッシュの値を編集するだけです。を使用して、いつでも現在のXML文字列を出力できますGyoku.xml(my_hash)

于 2012-09-20T01:35:40.243 に答える