2010-10-06 98 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