Разбор SOAP-ответа с использованием libxml в Ruby - PullRequest
4 голосов
/ 27 апреля 2010

Я пытаюсь проанализировать следующий SOAP-ответ от Savon SOAP API

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:getConnectionResponse xmlns:ns="http://webservice.jchem.chemaxon">
            <ns:return>
                <ConnectionHandlerId>connectionHandlerID-283854719</ConnectionHandlerId>
            </ns:return>
        </ns:getConnectionResponse>
    </soapenv:Body>
</soapenv:Envelope>

Я пытаюсь использовать libxml-ruby безуспешно. В основном я хочу извлечь что-нибудь внутри тега и значение connectionHandlerID.

Ответы [ 2 ]

6 голосов
/ 29 апреля 2010

Поскольку вы используете Savon, вы можете преобразовать ответ в хеш. Метод конвертации response.to_hash делает и другие полезные для вас вещи.

После этого вы сможете получить нужное значение, используя код, подобный следующему

hres = soap_response.to_hash
conn_handler_id = hres[:get_connection_response][:return][:connection_handler_id]

Ознакомьтесь с документацией

2 голосов
/ 27 апреля 2010

Я бы порекомендовал нокогири .

Предполагается, что ваш XML-ответ находится в объекте с именем response.

require 'nokogiri'
doc = Nokogiri::XML::parse response
doc.at_xpath("//ConnectionHandlerId").text
...