2012-09-18 5 views
6

Builder :: XmlMarkupオブジェクトから未処理のXMLにアクセスする際に問題があります。私はXMLを作成するために、Builderを使用しているスクリプトでTypeError:Builder :: XmlMarkupを配列に変換できません

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' 

、私はPOSTに@xmlを渡している:

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

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

これは、同じエラーを与えます

もちろん、@ xml.to_xmlを実行するとエラーは返されませんが、XMLに</to_xml>が追加されます。つまり、実際にXMLオブジェクトをxmlに変換していません。それは私が望むものではありません。

xmlにアクセスできるようにするには、xmlに余分なノードを追加せずに投稿に渡すことができますか?

編集:可能な解決策

@xml.target!を行うには、問題を解決するようだが、私は理由を理解していません。

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

おそらく、誰かが私がここで何が起こっているのか理解するのを助けることができます。

puts xml 

を使用して

答えて

0

はビルダー:: XmlMarkupオブジェクトを出力するので、

puts xml.target! 

を使用してエラーに

を与えているあなたは

欲しいものである現在のXML文字列を出力します