【问题标题】:XML::Compile and xsd getting errorsXML::Compile 和 xsd 出现错误
【发布时间】:2014-10-06 10:08:53
【问题描述】:

xsd 文件的摘录:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns="http://www.derivatexxl.de/derivatexxl/v1.1" 
           targetNamespace="http://www.derivatexxl.de/derivatexxl/v1.1" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
  <xs:include schemaLocation="derivatexxlTypes.xsd"/>
  <!-- Root -->
  <xs:element name="DERIVATEXXL">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="DELIVERY"/>
        <xs:element ref="GENERAL_INFORMATION" minOccurs="0"/>
        <xs:element ref="SENDER"/>
        <xs:element ref="ISSUER"/>
        <xs:element ref="PRODUCT" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

我的代码:

use warnings;
use strict;
use XML::Compile::Cache;
use XML::Compile::Util qw/pack_type/;

my $xsds = ['derivatexxlTypes.xsd', 'derivatexxl_110.xsd'];
my $schema = XML::Compile::Cache->new($xsds);
# This works, it prints all the available definitions
$schema->printIndex();
my $type = pack_type 'http://www.derivatexxl.de/derivatexxl/v1.1', 'DERIVATEXXL';
warn $schema->template('PERL' => $type);

我收到此错误消息: “正则表达式错误:编译失败:需要一个字符范围”

如果我将最后一行更改为: 警告 $schema->template('PERL' => 'DERIVATEXXL');

我得到错误: “错误:找不到元素或属性 `DERIVATEXXL'”

说实话,我不确定我是不是没听懂,还是 XML::Compile 无法处理这些 xsd 文件...

如果有任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

    标签: xml perl xsd


    【解决方案1】:

    错误消息“regexp error ...”表明模式处理器反对模式中的正则表达式,这意味着问题将出在xsd:pattern 元素上。您显示的 XSD 架构文档不包含任何模式元素,因此看起来问题出在架构文档 derivatexxlTypes.xsd 中。

    问题的描述(“期望一个字符范围”)表明解析器在表达式中找到了一个左方括号,并认为它已经看到了一个字符范围的开头(采用a-z 或类似的形式),但不是结局。请注意,在 XSD 1.0 中,与 Perl 不同的是,某些处理器在处理 [a-zA-Z.-] 之类的表达式时容易遇到问题——如果您想在字符组中使用连字符,请将其转义:[a-zA-Z.\-]

    更改代码时收到的错误消息在我看来是次要问题。你已经知道处理器没有成功编译模式,当你向它询问模式中的特定元素时,它找不到元素也就不足为奇了:它无法编译模式,所以当它正在寻找已编译模式中名为 DERIVATEXXL 的元素或属性,它在一个空模式中查找。 (但我不是 XML::Compile 的用户;这是猜测。)

    【讨论】:

    • 看准了!使用 xmllint 我发现了有问题的模式。非常感谢您的帮助。
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多