我需要验证XML agaist架构。
我尝试过XML :: SAX :: ParserFactory; XML :: Validator :: Schema和相关模块,但看起来有限 在某种意义上它不能识别xsd:unique,xsd:group,xsd:keyref,xsd:union和xsd:key等模式元素。
这些是xsd:unique等新增内容吗?
感谢您是否可以向我指出一些最新且完成任务的Perl模块。
提前致谢。
答案 0 :(得分:10)
这使用备受推崇的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 =)试一试;)