我需要一个XSD来支持可能具有不同顶级元素名称的XML,但XML中的所有元素都是相同的。
不确定是否可能,值得问。
例如:
<abc>
<name></name>
<address></address>
<phone>
<home></home>
<cell></cell>
</phone>
</abc>
<xyz>
<name></name>
<address></address>
<phone>
<home></home>
<cell></cell>
</phone>
</zyx>
示例XSD:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="abc">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="address"/>
<xs:element name="phone">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="home"/>
<xs:element type="xs:string" name="cell"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:3)
当然,只需命名complexType
,全局定义,并在可能的根元素的声明中引用它:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="abc" type="CommonType"/>
<xs:element name="xyz" type="CommonType"/>
<xs:complexType name="CommonType">
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="address"/>
<xs:element name="phone">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="home"/>
<xs:element type="xs:string" name="cell"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>