2012-01-10 124 views
0

這就是我的xsd的樣子。空氣和汽車延伸段。XML自動生成問題

<xs:element name="PNR" type="PNR" /> 

<xs:element minOccurs="0" maxOccurs="1" name="Segments" > 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Segment" type="Segment"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="Air"> 
<xs:complexContent> 
    <xs:extension base="Segment"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="Departure" type="AirportInfo" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="Arrival" type="AirportInfo" /> 

    </xs:sequence> 
    </xs:extension> 
</xs:complexContent> 
</xs:complexType> 

<xs:complexType name="Car"> 
<xs:complexContent> 
    <xs:extension base="Segment"> 
    <xs:sequence> 
     <xs:element name="PickUp" type="AddressInfo" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="DropOff" type="AddressInfo" minOccurs="0" maxOccurs="1"/> 

    </xs:sequence> 
    </xs:extension> 
</xs:complexContent> 
</xs:complexType> 

我想要的輸出,看起來像這樣:

<Segments> 
<Segment xsi:type="Air"> 
    <Departure></Departure> 
    <Arrival></Arrival> 
</Segment> 
<Segment xsi:type="Car"> 
    <PickUp></PickUp> 
    <DropOff></DropOff> 
</Segment> 
</Segments> 

但是,當我使用的工具,例如XMLSpy的或.NET庫(或其他)自動生成從我的XSD XML,我得到這個(空氣產生多次W/O車)。

<Segments> 
<Segment xsi:type="Air"> 
    <Departure></Departure> 
    <Arrival></Arrival> 
</Segment> 
<Segment xsi:type="Air"> 
    <Departure></Departure> 
    <Arrival></Arrival> 
</Segment> 
</Segments> 

我的XSD有問題嗎?

+0

它爲什麼會生成你想要的XML?它根據您的模式生成有效的XML。您的架構不會阻止兩個「Air」元素。 – 2012-01-10 20:52:57

+0

我不介意它是否會產生兩個「空氣」......我需要它來產生「汽車」......我該怎麼做? – Laguna 2012-01-10 20:56:42

+1

你爲什麼要做自動生成?目的是什麼?自動生成僅用於生成示例文檔。 – 2012-01-10 20:57:50

回答

1

這是我曾經用來從一組模式中生成XML的技術。雖然它看起來不像這個工作的正確課程,但請看XmlSchemaValidator課程。訣竅是你可以問它在驗證中當前正在驗證的文檔的有效性。然後您可以生成該文檔中當時有效的XML,並且驗證相同的XML,以便更新XmlSchemaValidator。然後,您可以再次詢問文檔中當時有效的內容等。

當您得到抽象類型時,您必須知道生成每種可能的派生類型之一。

+0

Thx尋求建議。我會玩w/it。但在我看來,我試圖實現的應該是一件普通的事情,並且.net庫缺少一些應該實現它的本地功能。 – Laguna 2012-01-10 21:56:32

+1

如果它缺少功能,那麼它已經失蹤了十年,而且XMLspy缺少相同的功能。你可能會誤解這是多麼普遍。你的模式多久改變一次?模式更改時需要多少時間手動修改XML? – 2012-01-10 23:17:56