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);
我收到此错误消息: “regexp错误:编译失败:期待char范围”
如果我将最后一行更改为: 警告$ schema-&gt;模板('PERL'=&gt;'DERIVATEXXL');
我收到错误: “错误:找不到元素或属性`DERIVATEXXL'”
说实话,我不确定我是不是得到它,或者XML :: Compile是否无法使用这些xsd文件......
我非常感谢任何帮助。
谢谢。
答案 0 :(得分:0)
错误消息“regexp error ...”表明架构处理器反对架构中的正则表达式,这意味着问题将出现在xsd:pattern
元素上。您显示的XSD架构文档不包含任何模式元素,因此问题出现在架构文档derivatexxlTypes.xsd
中。
问题的描述(“Expecting a char range”)表明解析器在表达式中找到了左方括号并认为它已经看到了字符范围的开头(采用a-z
形式或类似的),但不是结局。请注意,在XSD 1.0中,与Perl不同,某些处理器容易出现像[a-zA-Z.-]
这样的表达式 - 如果你想在字符组中使用连字符,请将其转义:[a-zA-Z.\-]
。
更改代码时收到的错误消息对我来说就像是次要问题。您已经知道处理器在编译模式时没有成功,当您向模式中询问特定元素时,它无法找到元素就不足为奇了:它无法编译模式,所以当它正在寻找时在编译的模式中名为DERIVATEXXL的元素或属性,它正在查找空模式。 (但我不是XML :: Compile的用户;这是推测。)