2012-09-18 8 views
6

Mam problemy z uzyskaniem dostępu do nieprzetworzonego xml z obiektu Builder :: XmlMarkup.TypeError: nie można przekonwertować Builder :: XmlMarkup na Array

irb> xml = Builder::XmlMarkup.new(:target => '') 
=> <pretty_inspect/> 

irb> xml.foo("bar") 
=> "<pretty_inspect/><foo>bar</foo>" 

irb> puts xml 
TypeError: can't convert Builder::XmlMarkup to Array (Builder::XmlMarkup#to_ary gives String) 
from (pry):122:in `puts' 

W skrypcie gdzie używam Builder do tworzenia XML, olewam @xml na stanowisko:

response = HTTParty.post(API_ENDPOINT, :body => @xml) 

To daje ten sam błąd:

TypeError (can't convert Builder::XmlMarkup to Array (Builder::XmlMarkup#to_ary gives String)): 

Oczywiście, jeśli zrobię @ xml.to_xml, to nie zwróci błędu, ale dodaje on do xml </to_xml>, co oznacza, że ​​w rzeczywistości nie konwertuje obiektu XML na xml. Nie tego chcę.

Jak mogę uzyskać dostęp do pliku xml, aby móc przekazać go do mojego posta bez dodawania dodatkowych węzłów do mojego xml?

Edit: Możliwym rozwiązaniem

Doing @xml.target! wydaje się rozwiązać ten problem, ale nie jestem pewien, czy rozumiem dlaczego.

response = HTTParty.post(API_ENDPOINT, :body => @xml.target!) 

Być może ktoś może mi pomóc zrozumieć, co się tutaj dzieje.

Odpowiedz

0

Korzystanie

puts xml 

jest wyprowadzanie Builder :: obiektu XmlMarkup a tym samym dać błąd

Korzystanie

puts xml.target! 

wyprowadza bieżący ciąg XML, który jest co chcesz