2016-05-04 13 views
0

Ich schreibe eine Anwendung zum Parsen von XML. Ich muss Daten von einer XML-Datei erhalten, und dann in einer Schleife muss ich eine andere XML-Datei öffnen.Laden Sie mehrere XML-Dateien herunter

Der Code sieht wie folgt aus:

$doc = Nokogiri::XML(open('myxmladress')) 
$doc.xpath('//job').each do |job| 
    if job.xpath('name').text.include?('joe') 
    $doc2 = Nokogiri::XML(open('myxmladress_for_joe')) 
    end 
end 

Ich glaube, dass ich nicht mehrere HTTP-Verbindungen geöffnet haben kann.

Kann ich laden Sie einfach die ganze Datei statt

$doc Nokogiri::XML(open('myxmladress')) 

mit oder gibt es eine Möglichkeit, die Nokogiri HTTP-Verbindung zu schließen?

Was ist mehr ich es herunterladen von https.

Mein Fehler:

in `open_http': 500 Server Error (OpenURI::HTTPError) 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:210:in `catch' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:210:in `open_loop' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:151:in `open_uri' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:717:in `open' 
from /home/nagios/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/open-uri.rb:35:in `open' 
from jenkins_auth.rb:97:in `block (2 levels) in combine_partial_results' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:187:in `block in each' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:186:in `upto' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:186:in `each' 
from jenkins_auth.rb:89:in `block in combine_partial_results' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:187:in `block in each' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:186:in `upto' 
from /home/nagios/.rvm/gems/ruby-2.3.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/node_set.rb:186:in `each' 
from jenkins_auth.rb:86:in `combine_partial_results' 
from jenkins_auth.rb:130:in `get_tests_for_job' 
from jenkins_auth.rb:137:in `<main>' 
+0

Ich bin mir nicht sicher, aber ich glaube, Nokogiri kümmert sich um dieses Zeug von mehreren http-Verbindungen darin und Sie brauchen sich nicht darum zu kümmern. Läuft dein Code? Wenn nicht, was sind die Fehlermeldungen? –

+0

Der Fehler ist auf der Serverseite: 500 Fehlercode bedeutet, dass der Server einen internen Fehler hatte. – jphager2

+0

Also, um alles zusammenzufassen, ist das Problem wahrscheinlich mit Server und ich meine Methode, es wie im obigen Code gezeigt, ist mjore oder weniger korrekt? –

Antwort

0

Sie openURI verwenden ein Dokument aus einer URL zu holen. Ich bin mir ziemlich sicher, dass dies keine offene Verbindung zurücklässt, sondern das Dokument in ein IO ähnliches Objekt liest, quasi wie eine Datei.

Ihr Problem scheint zu sein, dass der Server einen internen Fehler hatte.

+1

OpenURI gibt ein StringIO-Objekt zurück, wenn ich mich recht erinnere. –

Verwandte Themen