7

SOAPにRuby savonを使用することを検討しています。純粋に自虐的な理由から、属性を持つ SOAP 要素を処理する必要があります。

したがって、問題ありません。savon docs サイトに、この機能を強調する例があります。

{ :person => "Eve", :attributes! => { :person => { :id => 666 } } }.to_soap_xml
"<person id=\"666\">Eve</person>"

私の問題は、子要素に属性を設定する方法です。たとえば、address 子要素を person に追加するとします。

{ :person => {:address => ""}, :attributes! => { :person => { :id => 666 } } }.to_soap_xml

ここで、address 要素に id 属性を追加します。

属性ハッシュにアドレスをネストするとうまくいきません:

{ :person => {:address => ""}, :attributes! => { :person => { :id => 666, :address => {:id => 44 }} }}.to_soap_xml

だから私の質問は、どうすればこれを手に入れることができますか?

<person id=666><address id=44></address></person>
4

2 に答える 2

18

以前の回答が機能しなくなったという問題に遭遇しました。最終的に、属性を追加する正しい構文につながるhttps://github.com/savonrb/savon/issues/518を見つけました。

したがって、前の例は次のようになります。

{ 
  :person => {
    :@id => 666,
    :address => {
      :@id => 44
    }
  }
}

次のxmlを生成します

<person id="666">
  <address id="44"/>
</person>
于 2015-02-11T19:02:59.040 に答える
14

あなたは近かった-:attributes!値を含む同じハッシュにキーを入れるだけでした。

{
  :person => {
    :address => "", 
    :attributes! => { :address => { :id => 44 } }
  }, 
  :attributes! => { :person => { :id => 666 } } 
}.to_soap_xml

# => "<person id=\"666\"><address id=\"44\"></address></person>"
于 2010-12-09T04:56:48.967 に答える