2010-09-22 3 views
7

Мне нужно отправить некоторый xml в webservice, и я пытаюсь использовать HTTParty. Может ли кто-нибудь привести пример того, как я это делаю?Может ли кто-нибудь предоставить пример публикации XML с помощью HTTParty и Ruby on Rails?

Вот формат XML мне нужно размещать:

<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> 

Вот мой класс до сих пор:

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 

Я не совсем уверен, как конкретизации add_candidate.

Любая помощь будет оценена по достоинству.

Спасибо.

ответ

16

У вас есть два варианта. HTTParty позволяет отправлять как строку, так и хэш.

Строка версия будет:

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>") 

Функциональная, но не очень. Я хотел бы сделать это вместо:

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

Теперь, я не могу точно сказать, является ли пространства имен требуется конечная точка, и если да, то хэш-версия будет работать. Если это так, вам может потребоваться сделать тело в виде строки.

+0

Спасибо. Только то, что мне нужно! –

+0

Не беспокойтесь. Если мое решение решило проблему, пожалуйста, «примите» ответ, нажав галочку слева от моего ответа. У вас будет легче получить ответы на другие вопросы. – vonconrad

+1

Мне нравится ваша симпатичная версия. Как бы добавить атрибут к одному из элементов? Скажите: электронной почте нужен атрибут «foo» со значением «bar». Как бы Вы это сделали? – doremi