2012-09-18 15 views
6

Tengo problemas para obtener acceso al xml sin formato desde un objeto Builder :: XmlMarkup.TypeError: no se puede convertir Builder :: XmlMarkup en 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' 

En un guión en el que estoy usando Builder para crear el XML, estoy pasando @xml a un POST:

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

Esto da el mismo error:

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

Por supuesto, si hago @xml.to_xml, no devuelve un error, pero agrega </to_xml> al xml, lo que significa que en realidad no está convirtiendo el objeto XML en xml. Eso no es lo que quiero.

Entonces, ¿cómo puedo obtener acceso al xml para poder pasarlo a mi publicación sin agregar nodos adicionales a mi xml?

Editar: posible solución

Haciendo @xml.target! parece resolver el problema, pero no estoy seguro de entender por qué.

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

Quizás alguien pueda ayudarme a entender lo que está sucediendo aquí.

Respuesta

0

Usando

puts xml 

está emitiendo el Constructor :: XmlMarkup objeto y por lo tanto dan el error

Usando

puts xml.target! 

da salida a la cadena XML actual, que es lo que quiere

Cuestiones relacionadas