用Nokogiri阅读XML的问题

时间:2011-08-18 17:40:05

标签: ruby xml nokogiri

我的Ruby脚本应该从URL读取XML文档并检查它是否格式良好,并返回任何错误。我有一个使用以下文本托管的示例错误XML文档(来自Nokogiri tutorial

<?xml version="1.0"?>
  <root>
    <open>foo
      <closed>bar</closed>
  </root>

我的测试脚本如下(url指的是我个人服务器上托管的上述xml文件):

require 'nokogiri'

document = Nokogiri::XML(url) 

puts document
puts document.errors

输出结果为:

<?xml version="1.0"?>
Start tag expected, '<' not found

为什么它只捕获XML文件的第一行?即使使用已知良好的XML文件,它也能做到这一点。

3 个答案:

答案 0 :(得分:5)

它正在尝试解析网址,而不是其内容。请注意,Nokogiri::XML的第一个参数必须是包含文档或IO对象的字符串,因为它只是Nokogiri::XML::Document.parse的快捷方式,如here所述。< / p>

编辑:从uri阅读

require 'open-uri'
open(uri).read

答案 1 :(得分:3)

我不太确定您使用什么代码来实际输出XML的内容。我只看到错误打印代码。但是,我已经发布了一些示例代码,以便通过下面的Nokogiri有效地浏览XML:

<item>
  Something
</item> 
<item>
  Else
</item>

doc = Nokogiri::XML(open(url))
set = doc.xpath('//item')
set.each {|item| puts item.to_s}
  #=> Something
  #=> Else

通常,教程here可以为您提供帮助。

答案 2 :(得分:0)

如果您已经从Nokogiri xml获取xml,请确保在将其传递给XML函数之前使用'.to_s'。

例如,

  xml = Nokogiri :: XML(existing_nokogiri_xml_doc.to_s)