XSD支持具有不同名称的顶级元素

时间:2014-12-04 20:46:50

标签: xml xsd

我需要一个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>

1 个答案:

答案 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>