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的技术。尽管它看起来不适合该作业,但请查看XmlSchemaValidator类。诀窍是,您可以在验证时询问它什么对您正在验证的文档有效。然后,您可以生成文档中该点有效的XML,并验证相同的XML,以便更新XmlSchemaValidator。然后,您可以再次询问文档中此时有效的内容,等等。
当您使用抽象类型时,您必须知道如何生成每种可能的派生类型中的一种。