ruby-on-rails - 如何使用 Nokogiri 验证 XML?

标签 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>

我做错了什么?

最佳答案

如果要查看文档是否为无效 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 数组。

关于ruby-on-rails - 如何使用 Nokogiri 验证 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34594065/

相关文章:

ruby-on-rails - 添加一个 CSS 类到 <%= f.submit %>

ruby - 使用 Koala gem 检索评论和回复

ruby - 从另一个类访问 Sinatra 作用域

ruby-on-rails - 命令轨服务器

ruby-on-rails - 类型错误 : Books is not a class

ruby - 在 Coffeescript 中使用 Sprockets,你//如何要求?

java - 如果父节点和子节点同名,如何找到一个节点?

java - 获取 XML 文件中的特定 child 姓名

java - XML 验证错误,未找到元素(我认为即使元素存在并且架构和 xml 已正确加载)

ruby-on-rails - ROR 传递数组作为参数