如何使用Nokogiri验证XML?

时间:2016-01-04 15:06:39

标签: ruby-on-rails ruby xml xml-parsing nokogiri

我必须验证XML文档,以便它不接受无效的XML文档。

我这样做是为了处理无效的文件:

xml ||= Nokogiri::XML xml_data do |config| 
  config.strict
end
rescue Nokogiri::XML::SyntaxError => e
  puts "caught exception: #{e}"
else
  #further processing if no error

但即使对于有效的XML文档,它也会显示:

caught exception: Extra content at the end of the document

示例XML我使用:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果要查看文档是否为无效XML,只需检查返回文档的errors方法:

require 'nokogiri'

doc = Nokogiri::XML('<xml><foo></xml>')
doc.errors
# => [#<Nokogiri::XML::SyntaxError: Opening and ending tag mismatch: foo line 1 and xml>,
#     #<Nokogiri::XML::SyntaxError: Premature end of data in tag xml line 1>]

如果Nokogiri发现任何错误,它会填充errors数组。