我正在尝试将xml文档转换为json。
xml文件是从网址加载的:
xml = Nokogiri::XML(open(url))
通过这样的POST检索网址:
url = params[:q]
测试网址:
http://www.fitnessdelivery.nl/feeds/googleshopping.xml
导致错误的行:
puts(Hash.from_xml(xml).to_json)
整个错误(错误消息中包含的长长的产品列表除外:
The document "\n\nFitnessdelivery.nl\nhttps://www.fitnessdelivery.nl\nFitnessdelivery.nl,....... werkdag\n0\n1\n\n\n\n" does not have a valid root
我无法弄清问题是什么,以及如何解决它。
答案 0 :(得分:1)
如果您运行以下内容:
url = 'http://www.fitnessdelivery.nl/feeds/googleshopping.xml'
open(url)
您将收到此错误: RuntimeError:禁止重定向:http://www.fitnessdelivery.nl/feeds/googleshopping.xml - > https://www.fitnessdelivery.nl/feeds/googleshopping.xml
如您所见,尝试重定向。如果您将网址更改为:
https://www.fitnessdelivery.nl/feeds/googleshopping.xml
应该有效
更好的方法是捕获异常并重试:
url = 'http://www.fitnessdelivery.nl/feeds/googleshopping.xml'
uri = URI.parse(url)
tries = 3
begin
uri.open(redirect: false)
rescue OpenURI::HTTPRedirect => redirect
uri = redirect.uri
retry if (tries -= 1) > 0
raise
end
此外,Hash.from_xml需要一个字符串 - 如果不是,则会获得有效的根异常。
xml = Nokogiri::XML(open(url))
puts(Hash.from_xml(xml.to_s).to_json)