2012-01-10 14 views
0

これは私のxsdの外観です。空気と車はセグメントを延長する。XML自動生成の問題

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

をしかし、私は、このようなXMLSpyのまたは.NETライブラリ(または何でも)などのツールを使用して、私のXSDからXMLを自動生成、I:

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

は、私は、このような出力をしたいですこれを得る(空気は複数回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を生成しました。あなたのスキーマは2つの "Air"要素を防ぎません。 –

+0

2つの "Air"を生成するかどうかは気にしません... "Car"も生成する必要があります。どうすればいいですか? – Laguna

+1

なぜ自動生成を行っていますか?目的は何ですか?自動生成は、サンプル文書を生成するためのものです。 –

答えて

1

これは、以前はスキーマのセットからXMLを生成するために使用した手法です。それは仕事のための適切なクラスのように見えませんが、XmlSchemaValidatorクラスを見てください。トリックは、検証の時点で検証している文書に対して有効なものを尋ねることができるということです。 文書内のその時点で有効なXMLを生成し、のXmlSchemaValidatorを更新するために同じXMLを検証します。ドキュメントのその時点で有効なものを再度尋ねることができます。

抽象型になったら、可能な派生型の1つを生成する必要があります。

+0

アドバイスのためにThx。私はそれと一緒に遊ぶよ。しかし、私が達成しようとしているのは共通のものでなければならないと思うし、.netライブラリにはそれを満たすネイティブ機能が欠けているようだ。 – Laguna

+1

機能が不足している場合は、10年間欠けており、XMLspyには同じ機能がありません。これがどれほど共通しているのか誤解されるかもしれません。スキーマの変更頻度スキーマが変更されたときにXMLを手で修正するのにどれくらいの時間がかかりますか? –