Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read response with Nokogiri from a SOAP call with Savon

I have make a soap-call with Savon. This works fine and give the following response:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http:// 
schemas.xmlsoap.org/soap/envelope/"> 
  <soap:Body> 
    <GetTop10Response xmlns="http://www.kirupafx.com"> 
      <GetTop10Result> 
        <string>string</string> 
        <string>string</string> 
      </GetTop10Result> 
    </GetTop10Response> 
  </soap:Body> 
</soap:Envelope> 

Now I want to take all of the string elements out of the response. But I can't get it to work.

def query(params=nil)

    client = Savon::Client.new do
      wsdl.document = "http://www.kirupafx.com/WebService/TopMovies.asmx?wsdl"
    end

    response = client.request :get_top10

    if response.success?
      xml = Nokogiri::XML(response.to_xml)
      print "Until here oké!"
      xml.search('//GetTop10Result').each do |result|
        print "How are you Ruby?"
        @result[result.at('string').inner_text] = result.at('string').inner_text
      end
    else
      raise "Error!"
end

But he never prints my beautiful "How are you Ruby?" Can somebody help me? What I'm doing wrong?

like image 456
user1237586 Avatar asked Nov 05 '22 04:11

user1237586


1 Answers

You could to this but this isnt the best way to deal with problems like this! You might have experience using Nokogiri and XML but its easier to use .to_hash like this.

def query
    client = Savon::Client.new do
          wsdl.document = "http://www.kirupafx.com/WebService/TopMovies.asmx?wsdl"
    end
    response = client.request(:get_top10)
    response.to_hash[:get_top10_response][:get_top10_result] if response.success?
    false
end
like image 87
davidb Avatar answered Dec 23 '22 06:12

davidb