2016-12-28 53 views
0

我有复杂类型的层次结构。按类型划分的xsd元素名称

例如:与元件StreetNumber,StreetName和POSTALCODE 混凝土类型是homeAddress用碱地址与基地址 混凝土型BusinessAddress

类型是homeAddress和BusinessAddress不具有任何额外的元件并且仅 摘要类型地址类型是不同的。

是否有可能在我的XML中有超过1个地址类型?

<HomeAddress> 
... 
</HomeAddress> 

<HomeAddress> 
... 
</HomeAddress> 

在XSD:

<xs:element name="address" type="Address" maxOccurs="unbounded"/> 

我想根据实际类型元素的名称是动态的。

回答

0

使用“抽象”的属性和XS:扩展元素:

<xs:complexType name="address" abstract="true"> 
    ... 
</xs:complexType> 

<xs:complexType name="homeAddress"> 
    <xs:complexContent> 
    <xs:extension base="mynamespace:address"></xs:extension> 
    </xs:complexContent> 
</xs:complexType> 
+0

如Java,可以在子类型被分配到超强型?我如何知道什么是实际类型? –

+0

是的。尝试通过像jaxb(用于Java)或xsd.exe(用于C#)的序列化代码生成工具来运行您的XSD,以查看OO继承概念如何将1:1映射到XML类型。关于“实际类型”,homeAddress是一个地址,所以它们都是。如果有帮助,可以在上面的例子中添加另一个复杂的子类型(例如“businessAddress”)。 –

+0

http://stackoverflow.com/questions/5020313/polymorphism-in-xsd-schema-and-jaxb-class的可能重复 –