Nokogiri 检查 XML 根目录/文件的有效性



有没有一个简单的方法/方法来检查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过于友好。

相关内容

  • 没有找到相关文章

最新更新