我的Ruby脚本应该从URL读取XML文档并检查其格式是否良好,如果有错误则返回。我有一个带有以下文本(来自Nokogiri教程)的示例坏XML文档:
<?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文件也这样做。
正在尝试解析url,而不是其内容。请注意,Nokogiri::XML
的第一个参数必须是包含文档或IO
对象的字符串,因为它只是这里所述的Nokogiri::XML::Document.parse
的快捷方式。
EDIT:用于读取uri
require 'open-uri'
open(uri).read
我不太确定您使用什么代码来实际输出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
如果您已经从Nokogiri xml中获得xml,那么请确保使用'。
例如,xml = Nokogiri:: xml (existing_nokogiri_xml_doc.to_s)