是否有一种简单的方法/方法来检查Nokogiri XML
文件是否具有正确的根,例如xml.valid?
一种检查XML文件是否包含特定内容的方法也是非常受欢迎的。
我在想xml.valid?
或xml.has_valid_root?
之类的东西。谢谢!
答案 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过于友善。