Проблема с автоматической генерацией XML - PullRequest
0 голосов
/ 10 января 2012

Вот так выглядит мой xsd.Air и Car расширяют сегмент.

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

Но когда я автоматически генерирую XML из своего XSD с помощью такого инструмента, как xmlspy илибиблиотека .net (или что-то еще), я получаю это (Air генерируется много раз без автомобиля).

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

Что-то не так с моим XSD?

1 Ответ

1 голос
/ 11 января 2012

Вот метод, который я когда-то использовал для генерации XML из набора схем. Хотя это не похоже на подходящий класс для работы, взгляните на класс XmlSchemaValidator . Хитрость в том, что вы можете спросить его, что является действительным для документа, который вы проверяете в тот момент проверки. Затем вы можете сгенерировать XML, действительный на тот момент в документе, и проверить того же XML, чтобы обновить XmlSchemaValidator. Затем вы можете спросить его снова, что является действительным на тот момент в документе и т. Д.

Когда вы доберетесь до абстрактного типа, вам нужно знать, чтобы сгенерировать один из каждого возможного производного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...