是否有一个Perl模块根据模式验证XML?

时间:2008-11-26 20:44:42

标签: xml perl validation schema

我需要验证XML agaist架构。

我尝试过XML :: SAX :: ParserFactory; XML :: Validator :: Schema和相关模块,但看起来有限 在某种意义上它不能识别xsd:unique,xsd:group,xsd:keyref,xsd:union和xsd:key等模式元素。

这些是xsd:unique等新增内容吗?

感谢您是否可以向我指出一些最新且完成任务的Perl模块。

提前致谢。

3 个答案:

答案 0 :(得分:10)

查看XML::LibXML

这使用备受推崇的libxml2库,大多数人都认为它是Expat和基于XML::Parser的模块的继承者。

对于架构验证,请查看XML::LibXML::Schema

use XML::LibXML;
use XML::LibXML::Schema;

my $schema = XML::LibXML::Schema->new(location => 'file.xsd' );
my $parser = XML::LibXML->new;

my $xml    = 'file.xml';
my $doc    = $parser->parse_file( $xml );

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

say "$xml is valid\n";

NB。我仍然主要是一个XML::Twig用户,几乎没有触及XML模式,所以我不知道XML :: LibXML :: Schema是否能解决你所遇到的问题,但它可能是CPAN上满足你需求的最佳解决方案。

答案 1 :(得分:2)

您是否尝试过使用xmllint进行验证?

答案 2 :(得分:1)

@Thushan 您是否绝对有必要使用Perl?如果没有,为什么不尝试 XMLSTARLET ?它是一个非常好的工具包,用于在终端中操作XML!

它不仅支持您需要的传统DTD和XSD,还支持Relax-NG架构。查看它的文档以了解如何Validate XML Documents with xmlstarlet 我希望这可以帮助你;)

祝你有个美好的一天!

PD哦,我看到你用过xmllint了!它也很棒,但我更喜欢xmlstarlet =)试一试;)