2010-10-06 101 views
0

好的,所以这里的最终目标是解析xml响应中的数据。响应采用红宝石串的格式。问题是从字符串(我知道对于response.body.to_s事实创建XML文件时,我得到一个错误是XML的一种有效的字符串:Nokogiri :: XML没有创建xml文档

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <CardTxn> 
    <authcode>123</authcode> 
    <card_scheme>Mastercard</card_scheme> 
    <country>United Kingdom</country> 
    </CardTxn> 
    <datacash_reference>XXXX</datacash_reference> 
    <merchantreference>XX0001</merchantreference> 
    <mode>TEST</mode> 
    <reason>ACCEPTED</reason> 
    <status>1</status> 
    <time>1286477267</time> 
</Response> 

里面的红宝石方法我试试生成的XML文件:

doc = Nokogiri::XML(response.body.to_s) 

doc.to_s的上面的代码后的输出实行的是:

<?xml version="1.0"?> 

为什么没有得到正确生成该文件的任何想法

+0

和response.body.to_s送东西? – shingara 2010-10-07 06:59:30

+0

是的,当我输出response.body.to_s到终端它是一个格式良好的XML字符串。我只想简单地将该字符串转换为'.xml'文件。 – scott 2010-10-07 19:07:24

回答

0

这适用于我的1.9.2。注意它是Nokogiri :: XML.parse()。

require 'nokogiri' 
asdf = %q{<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <CardTxn> 
    <authcode>123</authcode> 
    <card_scheme>Mastercard</card_scheme> 
    <country>United Kingdom</country> 
    </CardTxn> 
    <datacash_reference>XXXX</datacash_reference> 
    <merchantreference>XX0001</merchantreference> 
    <mode>TEST</mode> 
    <reason>ACCEPTED</reason> 
    <status>1</status> 
    <time>1286477267</time> 
</Response> 
} 

doc = Nokogiri::XML.parse(asdf) 
print doc.to_s 

这将XML解析为Nokogiri XML文档,但不创建文件。 doc.to_s只显示你打印它会是什么样子。

要创建文件替换 “打印doc.to_s” 与

 
File.open('xml.out', 'w') do |fo| 
    fo.print doc.to_s 
end