Nokogiri检查XML根/文件有效性

时间:2014-04-01 08:15:32

标签: ruby xml nokogiri

是否有一种简单的方法/方法来检查Nokogiri XML文件是否具有正确的根,例如xml.valid?一种检查XML文件是否包含特定内容的方法也是非常受欢迎的。

我在想xml.valid?xml.has_valid_root?之类的东西。谢谢!

2 个答案:

答案 0 :(得分:2)

你如何确定什么是正确的根?

<foo></foo>

有一个合适的根:

require 'nokogiri'

xml = '<foo></foo>'
doc = Nokogiri::XML(xml)
doc.root # => #<Nokogiri::XML::Element:0x3fd3a9471b7c name="foo">

Nokogiri无法确定其他东西应该是根源。 可能能够测试您是否知道根节点的名称应该是什么:

doc_root_ok = (doc.root.name == 'foo')
doc_root_ok # => true

通过查看errors可以查看解析的文档是否格式正确(不需要任何修正):

doc.errors # => []

如果Nokogiri必须修改文档只是为了解析它,errors将返回一个在解析之前所做的更改列表:

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

答案 1 :(得分:0)

一种常见且有用的模式是

doc = Nokogiri::XML(xml) do |config|
  config.strict
end

如果文档格式不正确,这将会摇摆不定。我喜欢这样做是为了阻止 Nokogiri对我的XML过于友善。

相关问题