2012-09-18 4 views
6

Ich habe Probleme mit dem Zugriff auf die rohe XML von einem Builder :: XmlMarkup-Objekt.TypeError: kann Builder :: XmlMarkup nicht in Array konvertieren

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 einem Skript, wo ich Builder bin mit dem XML zu erstellen, ich vorbei @xml an einen POST:

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

Dies gibt den gleichen Fehler:

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

Natürlich, wenn ich @ xml.to_xml mache, gibt es keinen Fehler zurück, aber es fügt </to_xml> dem xml hinzu, was bedeutet, dass es das XML-Objekt nicht wirklich in xml konvertiert. Das ist nicht was ich will.

Wie kann ich Zugriff auf die XML-Datei erhalten, damit ich sie an meine Post weitergeben kann, ohne dass zusätzliche Knoten zu meiner XML-Datei hinzugefügt werden?

Edit: mögliche Lösung

tun @xml.target! das Problem zu lösen scheint, aber ich bin nicht sicher, ob ich, warum verstehen.

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

Vielleicht kann mir jemand helfen zu verstehen, was hier passiert.

Antwort

0

Mit

puts xml 

den Builder ausgibt :: XmlMarkup Objekt und damit den Fehler geben

Mit

puts xml.target! 

gibt die aktuelle XML-String, das ist, was Sie wollen

Verwandte Themen