2012-12-24 35 views
0

我在將AS3類轉換爲XML時遇到問題。 有一個列表 - 項目:陣列有可能的類如何在XSD中使用complexTypes設計列表

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> 

如果我會把ShapeVOImageVO陣列中我將有下一個結果

<items> 
     <Image/> 
     <Image/> 
     <Shape/> 
     <Shape/> 
</items> 

例如,每個對象在中轉換圖像形狀。 我需要設計XSD結構,但我不知道如何。

我試圖使像here但沒有意義。 請幫助我!

回答

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)*

順便說一句:你也可以使用替代組但這些不太清楚,有點稀少,我明白並不是所有的工具都支持它們。

+0

非常感謝您的快速回復。 – adellantado

+0

我使用的是來自mx.rpc.xml包的標準Adobe工具,但似乎它不支持選項列表( )我將嘗試使用替換組,但我是一個新組件,任何人都可以幫助我? 提前致謝 – adellantado

+0

@adellantado你說選擇列表不被支持 - 這很基礎,我只查了mx.rpc.xml,唯一的對象到xml序列化類是[SimpleXMLEncoder](http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/xml/SimpleXMLEncoder.html#](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3 /mx/rpc/xml/SimpleXMLEncoder.html) - 這根本不使用xml模式,我認爲如果你退一步並重新定義你想要達到的目的(以及爲什麼)在你的問題中會有幫助 - 可能有更簡單的方法來實現它。 – 13ren