XML自动生成问题

本文关键字:成问题 XML | 更新日期: 2023-09-27 18:20:07

这就是我的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>

但是,当我使用诸如xmlspy或.net库(或其他任何工具)之类的工具从XSD自动生成XML时,我会得到这一点(在没有Car的情况下多次生成Air)。

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

我的XSD有问题吗?

XML自动生成问题

这里有一种我曾经用来从一组模式生成XML的技术。尽管它看起来不适合该作业,但请查看XmlSchemaValidator类。诀窍是,您可以在验证时询问它什么对您正在验证的文档有效。然后,您可以生成文档中该点有效的XML,并验证相同的XML,以便更新XmlSchemaValidator。然后,您可以再次询问文档中此时有效的内容,等等。

当您使用抽象类型时,您必须知道如何生成每种可能的派生类型中的一种。