2010-09-22 7 views
7

Necesito publicar algo de xml en un servicio web y estoy tratando de usar HTTParty. ¿Alguien puede dar un ejemplo de cómo voy a hacerlo?¿Alguien puede dar un ejemplo de cómo publicar XML usando HTTParty y Ruby on Rails?

Aquí es el formato del XML que necesito para publicar:

<Candidate xmlns="com.mysite/2010/10/10" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<FirstName></FirstName> 
<LastName></LastName> 
<Email></Email> 
<Gender></Gender> 
</Candidate> 

Aquí está mi clase hasta ahora:

require 'httparty' 


class Webservice 
    include HTTParty 
    format :xml 
    base_uri 'mysite.com' 
    default_params :authorization => 'xxxxxxx' 

    def self.add_candidate(first_name,last_name,email,gender) 
    post('/test.xml', :body => "")  
    end 
end 

No estoy muy seguro de cómo dar cuerpo a add_candidate.

Cualquier ayuda sería apreciada.

Gracias.

Respuesta

16

Tienes dos opciones. HTTParty te permite publicar tanto una cadena como un hash.

La versión de cadena sería:

post('/test.xml', :body => "<Candidate xmlns=\"com.mysite/2010/10/10\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><FirstName>#{first_name}</FirstName><LastName>#{last_name}</LastName><Email>#{email}</Email><Gender>#{gender}</Gender></Candidate>") 

funcional, pero no bastante. Me gustaría hacer esto en su lugar:

post('/test.xml', :body => { 
    :Candidate => { 
    :FirstName => first_name, 
    :LastName => last_name, 
    :Email  => email, 
    :Gender => gender, 
    } 
} 

Ahora, no puedo decir con seguridad si los espacios de nombres son requeridos por el punto final, y si es así, si la versión de hash a trabajar. Si ese es el caso, puede que tengas que ir haciendo el cuerpo como una cuerda.

+0

Gracias. ¡Justo lo que necesitaba! –

+0

Sin preocupaciones. Si mi solución resolvió el problema, por favor "acepte" la respuesta haciendo clic en la marca de verificación a la izquierda de mi respuesta. Te será más fácil obtener respuestas a otras preguntas de esa manera. – vonconrad

+1

Me gusta tu versión bonita. ¿Cómo agregarías un atributo a uno de los elementos? Diga: El correo electrónico necesitaba un atributo llamado 'foo' con valor 'bar'. ¿Cómo lo harías tú? – doremi