2010-10-06 5 views
0

Хорошо, поэтому конечной целью здесь является анализ данных внутри XML-ответа. Ответ приходит в формате рубиновой строки. Проблема заключается в том, что я получаю сообщение об ошибке при создании файла XML из этой строки (я знаю, за то, что response.body.to_s является действительной строкой 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

+0

Да, когда я вывожу response.body.to_s на терминал, это хорошо сформированная строка xml. Я просто хотел бы просто преобразовать эту строку в файл .xml. – scott

ответ

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 в XML-документе Nokogiri, но не создает файл. doc.to_s показывает только, как бы вы его напечатали.

Чтобы создать файл заменить "печать doc.to_s" с

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