2010-10-06 4 views
0

D'accord, l'objectif ultime est d'analyser les données à l'intérieur d'une réponse xml. La réponse vient dans le format d'une chaîne de rubis. Le problème est que je reçois une erreur lors de la création du fichier XML à partir de cette chaîne (je sais pertinemment que response.body.to_s est une chaîne valide de xml:Nokogiri :: XML ne crée pas de document 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> 

Dans la méthode rubis j'essaie pour générer un fichier xml:

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

la sortie de doc.to_s après le code ci-dessus est exécuté:

<?xml version="1.0"?> 

Toutes les idées pourquoi le fichier ne se correctement généré

+0

et response.body.to_s envoyer quelque chose? – shingara

+0

Oui, lorsque je renvoie response.body.to_s au terminal, il s'agit d'une chaîne XML bien formée. Je voudrais simplement convertir cette chaîne en un fichier '.xml'. – scott

Répondre

0

Cela fonctionne pour moi le 1.9.2. Notez que c'est 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 

Ceci analyse le code XML dans un document XML Nokogiri, mais ne crée pas de fichier. doc.to_s vous montre seulement ce que ce serait si vous l'imprimiez.

Pour créer un fichier remplacer "impression doc.to_s" avec

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