Поймать ответ XML с помощью Nokogiri - PullRequest
0 голосов
/ 08 сентября 2011

Я пробую функционал, в котором я получаю ответ XML для успеха (одно сообщение) и неудачи (несколько сообщений ответа), но я не могу перехватить эти сообщения в моем коде rails, используя nokogiri.с точки зрения ответа XML

Для сбоя (я могу также получить другое сообщение об ошибке)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<status>
  <error> Such username is allready taken </error>
</status>

Для успеха (это единственный ответ)

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<status>
   <success>Registration succesful</success>
 </status>

Inмой код Я пытаюсь сделать следующее

def create   

   @user = User.new(params[:user])


     a = "https://www.example.com"      

    url = URI.parse(a)
       http = Net::HTTP.new( url.host, url.port )
       http.use_ssl = true if url.port == 443
       http.verify_mode = OpenSSL::SSL::VERIFY_NONE if url.port == 443
       path =  url.path + "?" + "request_query"
       res, data = http.get( path ) 

       case res
        when Net::HTTPSuccess, Net::HTTPRedirection
            doc = Nokogiri::XML(data)

             doc.xpath('/status/success').each do |link|  
             @abc = link.content
             end

              flash[:notice] = @abc

             if @abc == 'Registration successful'
                 flash[:notice] = "Registration successful"

             redirect_to "/"



            else
             doc.xpath('/status/error').each do |link|  
             @err = link.content
             end

            flash[:notice] = @err
            render "new"    

    end
end

Любой, если у меня есть идея, спасет мой день.

1 Ответ

0 голосов
/ 08 сентября 2011

Это может вам помочь.

case res
    when Net::HTTPSuccess, Net::HTTPRedirection
    @doc = Nokogiri::XML(data)

    @doc.xpath('/status/success').each do |oop|
         @ee = oop.content
    end

    if @ee.nil?
        @doc.xpath('/status/error').each do |link|  
            @status = link.content
        end  

        flash[:notice] = @status
        render "new"
    else 
        flash[:notice] = @ee
        redirect_to "/"   
    end
end
...