2017-05-29 7 views
0

xmlドキュメントをjsonに変換しようとしています。Hash.from_xml(urlからのXML)REXML :: ParseExceptionの結果ドキュメントに有効なルートがありません

xmlファイルをURLからロードされます。

url = params[:q] 

テスト用URL:

http://www.fitnessdelivery.nl/feeds/googleshopping.xml 

xml = Nokogiri::XML(open(url)) 

URLは、このようなPOSTによって取得されますエラーが発生する行:

私は問題が何であるかを把握することはできませんし、それを解決する方法を

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

このリダイレクトはどのようにコントローラで行いますか?問題はルート 'https:// fitnessdelivery.nl'に次のアドレスをドメイン' https:// www.fitnessdelivery.nl/Fitnessdelivery.nl'として追加することです。これは、ルータに 'GET'を行うよう要求することを意味します'https://fitnessdelivery.nl/https:// www.fitnessdelivery.nl/Fitnessdelivery.nl'のリクエスト –

答えて

0

は、次の実行している場合:

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

あなたはリダイレクトが試みられている見ることができるように。あなたにURLを変更した場合:

https://www.fitnessdelivery.nl/feeds/googleshopping.xml

それは

を動作するはずですより良いアプローチは、例外をキャッチし、再試行して次のようになります。また、Hash.from_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 

は、文字列が必要です - それが有効でない場合は、有効なルート例外が発生します。

xml = Nokogiri::XML(open(url)) 
puts(Hash.from_xml(xml.to_s).to_json) 
+0

ありがとうございました! – Bas

+0

お寄せいただきありがとうございます。答えが気に入ったら、それを受け入れてください。 –