Savon: массив тегов XML

Я использую Savon для запросов SOAP, и в каком-то месте XML-запроса SOAP мне нужно сгенерировать это кусок кода:

<content>
  <item a="1" b="0"/>
  <item a="2" b="0"/>
  <item a="3" b="0"/>
</content>

Как лучше всего это сделать?


person ildyone    schedule 09.08.2011    source источник
comment
Я думаю, вам нужно будет еще кое-что объяснить. Попробуйте показать, что вы пробовали и как это не сработало, люди, вероятно, помогут вам больше.   -  person Chris Pfohl    schedule 09.08.2011
comment
добавил больше информации к вопросу, чтобы другие не проголосовали за него.   -  person rubiii    schedule 25.08.2011


Ответы (3)


Я нашел решение.

soap.body = {  
    #... other tags  
    "content" => {  
        "item" => ["", "", ""],  
        :attributes! => {  
            "item" => {  
                "a" => ["1", "2", "3"],  
                "b" => ["0", "0", "0"]  
            }  
        }  
    }
    #... other tags    
}  
person ildyone    schedule 10.08.2011

Savon v0.9.7 поставляется с улучшенной поддержкой Builder, и я рекомендую использовать его. вместо того, чтобы пытаться форсировать атрибуты через хэши, потому что это более читабельно:

soap.body do |xml|
  xml.content do
    xml.item(:a => "1", :b => "0")
    xml.item(:a => "2", :b => "0")
    xml.item(:a => "3", :b => "0")
  end
end
person rubiii    schedule 25.08.2011

Вы можете сделать что-то вроде:

def content
  xml = Builder::XmlMarkup.new
  xml.content do
    xml.item(:a => "1", :b => "0")
    xml.item(:a => "2", :b => "0")
    xml.item(:a => "3", :b => "0")
  end
end
person Kyle d'Oliveira    schedule 09.08.2011
comment
Нет, нет, мне нужно что-то положить внутрь мыльного тела. Потому что у меня уже есть структурированный xml с использованием хэшей. - person ildyone; 10.08.2011
comment
Затем, пожалуйста, добавьте структуру, которая у вас есть в настоящее время, или структуру, которая вам нужна, к вопросу, чтобы на него можно было ответить. - person Kyle d'Oliveira; 10.08.2011