相关疑难解决方法(0)

使用RelaxNG进行XML模式验证

您可以针对性能和准确性推荐哪些XML验证工具,每个工具都是我们系统的关键问题?我们有以下要求:

  • 不是 xmllint(见下文)
  • 支持RelaxNG
  • 可以轻松地与Perl集成(这是可选的,但它会很好)

为什么不用xmllint?(这是背景,你可以跳过它,如果你愿意)

我们有一个大型的Perl系统,它使用RelaxNG来验证我们的XML.我们使用紧凑的RelaxNG格式trang将其转换为标准的RelaxNG格式.然后我们通过xmllint进行实际验证.

这就是问题出现的时候.xmllint经常会错误地报告验证错误.它不会给出误报或否定,但如果文档无法验证,xmllint通常会报告给定错误的错误元素或属性.有时错误是正确的("不希望看到元素'bar'),但仅仅是因为没有报告先前的错误(因为'bar'应该遵循必需但缺少的元素'foo',但xmllint不会'请告诉我们这一点.请注意,这是xmllint长期存在的问题,即使是最新版本也存在同样的问题.我们经常会收到大量的XML文档,错误地报告错误会给客户和开发人员带来很大的麻烦.

xml validation perl schema relaxng

16
推荐指数
1
解决办法
2976
查看次数

使用LibXML验证XML

目前,我使用XML :: LibXML perl模块根据定义的XML模式验证XML文件.目前,如果我的XML文件无法针对定义的XML Schema成功验证,我将得到一个错误列表通知我,例如某些元素不是预期的,然后是预期的.在我的XML文件中,我将有许多相同名称的元素,但它们可能嵌套在XML文件的不同位置.

我的问题是,无论如何,我可以在尝试执行验证时输出可能出错的任何元素的XPath位置吗?

目前,我的XML文件非常庞大,并且在验证失败时很难"调试"它,因为错误中显示的元素的名称可能会在XML文件的不同位置多次出现.

我的代码如下所示,使用LibXML根据模式验证XML文件.

#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;

my $schema_file = 'MySchema.xml';
my $document    = 'MyFile.xml';

my $schema = XML::LibXML::Schema->new(location => $schema_file);

my $parser = XML::LibXML->new;
my $doc    = $parser->parse_file($document);

eval { $schema->validate($doc) };
die $@ if $@;

print "$document validated successfully\n";
Run Code Online (Sandbox Code Playgroud)

xml validation perl libxml2

6
推荐指数
1
解决办法
4665
查看次数

标签 统计

perl ×2

validation ×2

xml ×2

libxml2 ×1

relaxng ×1

schema ×1