2011-08-18 47 views
4

我的Ruby脚本应该从URL中读取XML文档并检查其格式是否正确,并返回任何错误。我有以下文字(从Nokogiri tutorial主办的样品坏XML文档:使用Nokogiri读取XML的问题

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

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

require 'nokogiri' 

document = Nokogiri::XML(url) 

puts document 
puts document.errors 

输出是:

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

为什么只捕捉XML文件的第一行它这样做甚至与已知良好的XML文件

回答

3

我不太确定你用什么代码实际输出XML的内容。我只看到错误打印代码。不过,我已经发布了一些示例代码,以有效地通过XML与引入nokogiri移动下面:

<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应该帮助你。

+0

我想我的问题似乎与它的XML文件中读取到一个文件就行了。我还没有找到一个在线的例子:doc = Nokogiri :: XML(url)的作品。每个示例如下所示:@doc = Nokogiri :: XML(File.open(“shows.xml”))。 – Paul

+0

看看我的答案,并让我知道是否有什么不清楚。 – Serabe

+0

你需要open-uri吗? – providence

5

它试图解析的网址,而不是它的内容。请注意,Nokogiri::XML的第一个参数必须是包含文档或IO对象的字符串,因为它只是Nokogiri::XML::Document.parse的缩写,如here所述。

编辑:对于从URI

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

好的,我现在明白了。当我拥有的是URL时,我怎么解析这些内容? – Paul

+0

更新! “open-uri”开放uri很容易。 – Serabe

+0

我结束了使用普罗旺斯的行doc = Nokogiri :: XML(open(url)),但是谢谢你指点我正确的方向! – Paul

0

阅读,如果你是从引入nokogiri XML获取XML已经,然后确保你将它传递给XML函数之前使用” .to_s'。

例如, XML =引入nokogiri :: XML(existing_nokogiri_xml_doc.to_s)