Nokogiri :: XML没有创建xml文档

时间:2010-10-06 19:31:00

标签: ruby-on-rails xml nokogiri

好的,所以这里的最终目标是解析xml响应中的数据。响应以ruby字符串的格式出现。问题是我在从该字符串创建xml文件时遇到错误(我知道response.body.to_s是一个有效的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>

在ruby方法中,我尝试生成一个xml文件:

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

上述代码执行后doc.to_s的输出是:

<?xml version="1.0"?>

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

1 个答案:

答案 0 :(得分: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只显示你打印它会是什么样的。

要创建文件,请使用

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