TypeError:无法将Builder :: XmlMarkup转换为Array

dor*_*emi 6 ruby xml builder

我遇到了从Builder :: XmlMarkup对象访问原始xml的问题.

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'
Run Code Online (Sandbox Code Playgroud)

在我使用Builder创建XML的脚本中,我将@xml传递给POST:

  response = HTTParty.post(API_ENDPOINT, :body => @xml)
Run Code Online (Sandbox Code Playgroud)

这给出了同样的错误:

TypeError (can't convert Builder::XmlMarkup to Array (Builder::XmlMarkup#to_ary gives String)):
Run Code Online (Sandbox Code Playgroud)

当然,如果我执行@ xml.to_xml,它不会返回错误,但它会添加</to_xml>到xml,这意味着它实际上并没有将XML对象转换为xml.那不是我想要的.

那么如何才能获得对xml的访问权限,以便我可以将它传递给我的帖子,而无需在xml中添加额外的节点?

编辑:可能的解决方案

@xml.target!似乎解决了这个问题,但我不确定我理解为什么.

response = HTTParty.post(API_ENDPOINT, :body => @xml.target!)
Run Code Online (Sandbox Code Playgroud)

也许有人可以帮助我理解这里发生的事情.

Chr*_*y H 1

使用

puts xml
Run Code Online (Sandbox Code Playgroud)

正在输出 Builder::XmlMarkup 对象,因此给出错误

使用

puts xml.target!
Run Code Online (Sandbox Code Playgroud)

输出当前的xml字符串,这就是你想要的