我将AS3类转换为XML时遇到问题。 有一个列表 - items:Array ,可能有类
class ImageVO extends BaseSceneElementVO
class ShapeVO extends BaseSceneElementVO
需要转换:
<xs:element name="items" type="imageList"/>
其中:
<xs:complexType name="imageList">
<!-- here i'm hesitate-->
<xs:choice>
<xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Shape" type="Shape" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
</xs:complexType>
<xs:complexType name="Image">
<xs:complexContent>
<xs:extension base="BaseSceneElement">
<xs:sequence>
<xs:element .../>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Shape">
<xs:complexContent>
<xs:extension base="BaseSceneElement">
<xs:sequence>
<xs:element .../>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BaseSceneElement">
...
</xs:complexType>
如果我将 ShapeVO 和 ImageVO 放入数组我会得到下一个结果
<items>
<Image/>
<Image/>
<Shape/>
<Shape/>
</items>
i.g。每个对象都在图像和形状中转换。 我需要设计XSD结构,但我不知道如何。
我试图像here那样做但没有意义。 请帮帮我!
答案 0 :(得分:1)
我假设你想要一个与你的类匹配的XSD,即扩展BaseSceneElementVO的多态选择列表;这将与您提供的示例XML相匹配。
在您的XSD(您犹豫的部分)中:
<xs:choice>
<xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Shape" type="Shape" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
这是选择列表:<Image>
元素列表或 <Shape>
元素列表 - 所以不是列表混合它们,它将只是<Image>
或仅<Shape>
的列表。但是为了匹配您的类并验证您的示例XML,您需要一个选项列表,如下所示:
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Image" type="Image" />
<xs:element name="Shape" type="Shape" />
</xs:choice>
使用表达式表示法的表示法进行总结:您有i*|s*
,但需要(i|s)*
。