【问题标题】:How do I use savon nested attributes! hash?如何使用 savon 嵌套属性!哈希?
【发布时间】:2015-02-12 03:02:59
【问题描述】:

我正在考虑将 Ruby savon 用于 SOAP。出于纯粹自虐的原因,我必须处理具有属性的 SOAP 元素。

所以,没问题,savon docs 网站上有一个示例突出了这种能力:

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

我的问题是如何在子元素上设置属性,比如我给person添加一个address子元素:

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

现在我想给地址元素添加一个id属性:

如果我将地址嵌套在属性哈希中,那就不行了:

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

所以我的问题是,我怎样才能得到这个?

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

【问题讨论】:

    标签: ruby soap savon


    【解决方案1】:

    我遇到了上一个答案不再有效的问题。最终我找到了https://github.com/savonrb/savon/issues/518,它引导我使用正确的语法来添加属性。

    所以前面的例子现在应该是这样的

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

    这将生成以下 xml

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

    【讨论】:

    • 我怎样才能将它用于这个块.. schemas.microsoft.com/2003/10/Serialization/…>
    • 如果一些可怜的人来寻找有关 Savon XML 属性生成的信息:address: {'content!': "Downing street", '@id': 44} 将生成 &lt;address id="44"&gt;Downing Street&lt;/address&gt;
    【解决方案2】:

    您已经很接近了 - 只需将 :attributes! 键放入包含该值的同一哈希中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多