2012-01-10 81 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