我的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文件,它也能做到这一点。
答案 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)