1
我无法理解perl模式编译器的输出,看起来在某些情况下maxOccurs指示器被忽略。如果我尝试多次使用一个复杂元素,那么第一个引用似乎是正确的,但是,即使maxOccurs指示符设置为“1”,后续引用也会作为数组输出。我只是开始玩XML模式,所以我的理解是非常有限的。XML ::编译maxOccurs =“1”似乎无界
我有以下模式(对不起,我试图削减下来尽可能地):
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Top">
<xs:complexType>
<xs:sequence>
<xs:element ref="Foo" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Bar" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Foo">
<xs:complexType>
<xs:sequence>
<xs:element ref="Bar" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Bar">
<xs:complexType>
<xs:attribute name="Baz" use="optional" />
</xs:complexType>
</xs:element>
</xs:schema>
当我运行:
perl -MXML::Compile::Schema -e 'print XML::Compile::Schema->new("example.xsd")->template("PERL", "Top");'
我得到以下输出:
# is an unnamed complex
{ # sequence of Foo, Bar
# is an unnamed complex
# is optional
Foo =>
{ # sequence of Bar
# is an unnamed complex
# is optional
Bar =>
{ # is a xs:anyType
# becomes an attribute
Baz => "anything", }, },
# is an unnamed complex
# complex structure shown above
# is optional
Bar => [{},], }
作为Foo元素的“Bar”显示为复杂(如预期),但顶层下的“Bar”出现d列表复杂,即使maxOccurs =“1”(不是我所期望的)。我的理解是错误的还是我的模式不正确?
谢谢AKHolland,我试图为每个实体创建一个Class :: Struct,以便我可以更容易地填充它们,但是在这种情况下Bar会初始化为一个数组。我想我可能不得不走完整个dom树来完成这个,这可能不值得麻烦。 – Rajuk 2014-09-26 14:32:43