使用Nokogiri验证XML:找到验证错误的行数?

时间:2014-12-30 12:48:12

标签: ruby xml validation nokogiri

我正在尝试针对XSD架构验证相当大的XML文件。使用以下代码,Nokogiri完美地做到了这一点:

  xsd = Nokogiri::XML::Schema(File.read('batch_schema.xsd'))
  doc = Nokogiri::XML(File.read('batch205.xml'))

  xsd.validate(doc).each do |error|
    puts "#{error.line} :: #{error.message}"
  end

足够简单。仅限:error.line始终为65535.由于我们需要检查的XML文件非常庞大,因此获取行号确实非常有用。

我找到了这个XSD Validation cheatsheet,所以我找到了读取该行的选项。

在libxml2文档中,我发现我必须启用行号才能设置它。知道如何使用Nokogiri启用行号或在验证错误中获取行号吗?

1 个答案:

答案 0 :(得分:3)

我只需要稍微改写一下,而不是预先加载和解析整个xml,我只需要验证文件本身。像这样:

xsd = Nokogiri::XML::Schema(File.read('batch_schema.xsd'))

xsd.validate('batch205.xml').each do |error|
  puts "#{error.line} :: #{error.message}"
end