有没有一个简单的方法/方法来检查Nokogiri XML
文件是否具有正确的根目录,例如xml.valid?
检查XML文件是否包含特定内容的方法也非常受欢迎。
我在想xml.valid?
或xml.has_valid_root?
之类的东西.谢谢!
你将如何确定什么是正确的根?
<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>]
一个常见且有用的模式是
doc = Nokogiri::XML(xml) do |config|
config.strict
end
如果文档格式不正确,这将引发摇摆不定。我喜欢这样做是为了防止Nokogiri对我的XML过于友好。