2017-06-06 13 views
0

XSDでは、基本SaleTypeから拡張されたReturnTypeがあります。私は要素がxmlに現れる順序は気にしません。基本タイプからの拡張で要素出現順序を無視する

私はXSDを変更できますが、XMLの書き方を変更することはできません。何らかの理由でxmlが書き込まれる方法は、XSDで定義されている順序どおりの順序ではありません。私は注文をベースタイプではなく拡張で作ることができます。これをどうやって解決するのですか?

<xs:complexType name="SaleType"> 
    <xs:sequence> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> <!--adding this ignores the order for Sale but does not enforce it to the extensions--> 
      <xs:element name="ItemID" type="xs:string" /> 
      xs:element name="Description" type="xs:string" minOccurs="0"/> 
     </xs:choice> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="ReturnType"> 
    <xs:complexContent> 
     <xs:extension base="SaleType"> 
      <xs:sequence> 
       <xs:element name="Reason" type="xs:string" minOccurs="0"/> 
      </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

<!--Even though Description appears before ItemID, this xml validates since Reason is at the end--> 
<Return> 
    <Description>Item 123</Description> 
    <ItemID>123</ItemID> 
    <Reason>R1</Reason> 
</Return>  

<!--This xml does not validate since Reason is at the beginning--> 
<Return> 
    <Reason></Reason> 
    <Description>Item 123</Description> 
    <ItemID>123</ItemID> 
</Return> 

答えて

1

あなたは順序で指定された順序を上書きするXSDに拡張を使用することはできません。直接基底クラスを変更できない場合はoverrideを参照してください。ただし、xs:overrideにはXSD 1.1が必要です。

関連する問題