【问题标题】:Is there a Perl module that validates an XML against a schema?是否有根据模式验证 XML 的 Perl 模块?
【发布时间】:2010-09-24 05:43:36
【问题描述】:

我需要针对架构验证 XML。

我试过 XML::SAX::ParserFactory; XML::Validator::Schema 和相关模块,但看起来它们是有限的。
受限于它不能识别模式元素,例如 xsd:unique、xsd:group、xsd:keyref、xsd:union 和 xsd:key。

这些 xsd:unique 等是新增功能吗?

如果您能向我指出一些最新且符合任务要求的 Perl 模块,不胜感激。

提前致谢。

【问题讨论】:

    标签: xml perl validation schema


    【解决方案1】:

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

    【讨论】:

    • xmllint 的命令行工具效果很好。感谢 JDrago!
    【解决方案2】:

    看看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";
    

    注意。我仍然主要是XML::Twig 用户,几乎不接触 XML 架构,所以我不知道 XML::LibXML::Schema 是否会解决您遇到的问题,但它可能是 CPAN 上满足您需求的最佳解决方案。

    【讨论】:

      【解决方案3】:

      @图山 你绝对有必要使用 Perl 吗?如果没有,为什么不试试 XMLSTARLET?这是一个非常好的在终端中操作 XML 的工具包!

      它不仅支持您需要的遗留 DTD 和 XSD,还支持 Relax-NG 模式。查看它的文档以了解如何Validate XML Documents with xmlstarlet 我希望这对你有帮助;)

      祝你有美好的一天!

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

      【讨论】:

      • xmllint 的好处在于它使用与 XML::LibXML 相同的库,因此当我想做比单个 xmllint 命令更复杂的事情时,我可以轻松切换到 Perl。我使用xmlstarlet 进行简单的 XML 转换。
      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2011-07-07
      • 2012-07-26
      • 1970-01-01
      相关资源
      最近更新 更多