2016-05-04 108 views
0

我正在编写一个应用程序来解析XML。我必须从一个XML文件中获取数据,然后在一个循环中我必须打开另一个XML文件。下载多个XML文件

的代码看起来是这样的:

$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 

我相信我能不能有多个HTTP连接开放。

我可以简单地下载整个文件,而不是使用

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

或者是有什么办法可以关闭引入nokogiri HTTP连接?

什么是我正在通过https下载它。

我的错误:

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

我不确定,但我相信Nokogiri会处理它内部的多个http连接,并且您不需要关心它。你的代码在运行吗?如果不是,那么错误信息是什么? –

+0

错误在服务器端:500错误代码表示服务器有内部错误。 – jphager2

+0

所以总结一下,问题可能与服务器和我的做法,如上面的代码中显示的是mjore或更不正确? –

回答

0

您正在使用OpenUri获取从URL的文档。我非常肯定,这不会留下任何开放的连接,但会将文档读入类似IO的对象,有点像文件。

您的问题似乎是服务器有内部错误。

+1

如果我没有记错,OpenURI会返回一个StringIO对象。 –