2012-09-18 19 views
6

Sto riscontrando problemi con l'accesso all'XML raw da un oggetto Builder :: XmlMarkup.TypeError: impossibile convertire Builder :: XmlMarkup nell'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' 

In uno script in cui sto usando Builder per creare l'XML, sto passando atributo @xml ad un POST:

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

Questo dà lo stesso errore:

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

Ovviamente, se faccio @ xml.to_xml, non restituisce un errore, ma aggiunge </to_xml> a xml, il che significa che in realtà non converte l'oggetto XML in xml. Non è quello che voglio.

Quindi, come posso ottenere l'accesso all'accesso xml in modo che possa passarlo al mio post senza aggiungere nodi aggiuntivi al mio xml?

Edit: possibile soluzione

Facendo @xml.target! sembra risolvere il problema, ma non sono sicuro di aver capito il motivo.

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

Forse qualcuno può aiutarmi a capire cosa sta succedendo qui.

risposta

0

Utilizzando

puts xml 

è l'output del Builder :: oggetto XmlMarkup e quindi dare l'errore

Utilizzando

puts xml.target! 

emette la stringa XML corrente, che è ciò che si vuole

Problemi correlati