XSD 复合元素

XSD「复合元素」(Complex Element)最全实用总结

—— 真正 99% 项目里都用这 8 种写法就够了

复合元素 = 可以包含子元素、属性、混合文本等
典型例子:<person>、<order>、<book>、<address>

1. 8 种最常用写法(背会这 8 种,天下我有)

序号场景XSD 核心写法典型 XML 示例
1最常见:只有子元素(顺序固定)<xs:sequence><person><name>张三</name><age>28</age></person>
2子元素顺序随意<xs:all>(每个子元素 minOccurs/maxOccurs 只能是 0 或 1)地址的省市区可以乱序
3子元素任选其一<xs:choice>手机号或座机二选一
4子元素可以重复<xs:sequence maxOccurs="unbounded"> 或直接在 element 上写 maxOccurs<order><item>...</item><item>...</item></order>
5既有子元素又有属性(最最最常见!)<xs:sequence>…</xs:sequence> + <xs:attribute …/><book id="001"><title>XXX</title></book>
6纯属性元素(没有子元素)<xs:sequence/> + 多个 <xs:attribute><point x="10" y="20"/>
7混合内容(文本+子元素)<xs:complexType mixed="true"><p>这是<em>重点</em>内容</p>
8空元素(只有属性)不写 <xs:sequence> 或写空序列 + 属性<img src="a.jpg" width="100"/>

2. 真实项目中最常用的「黄金模板」(直接复制粘贴)

<!-- 1. 标准用户(最常见组合)-->
<xs:complexType name="UserType">
  <xs:sequence>
    <xs:element name="name"     type="xs:string"/>
    <xs:element name="age"      type="xs:int"          minOccurs="0"/>
    <xs:element name="email"    type="xs:string"       minOccurs="0"/>
    <xs:element name="phone"    type="xs:string"       minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="id"       type="xs:string"  use="required"/>
  <xs:attribute name="status"   type="UserStatusType"/>
</xs:complexType>

<!-- 2. 订单 + 订单明细(经典一对多)-->
<xs:complexType name="OrderType">
  <xs:sequence>
    <xs:element name="orderId"    type="xs:string"/>
    <xs:element name="customer"   type="CustomerType"/>
    <xs:element name="items">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="item" type="OrderItemType" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="total"      type="xs:decimal"/>
  </xs:sequence>
  <xs:attribute name="orderDate" type="xs:dateTime" use="required"/>
</xs:complexType>

<xs:complexType name="OrderItemType">
  <xs:sequence>
    <xs:element name="productId" type="xs:string"/>
    <xs:element name="quantity"  type="xs:positiveInteger"/>
    <xs:element name="price"     type="xs:decimal"/>
  </xs:sequence>
  <xs:attribute name="lineId" type="xs:string" use="required"/>
</xs:complexType>

3. 企业级最佳实践模板(大厂标配)

<xs:complexType name="任意业务实体Type">
  <xs:sequence>
    <!-- 业务字段 -->
    <xs:element name="name"      type="xs:string"/>
    <xs:element name="code"      type="xs:string" minOccurs="0"/>
    <!-- 一对多子表 -->
    <xs:element name="details"   minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="detail" type="DetailType" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>

  <!-- 通用审计属性(99% 系统都有)-->
  <xs:attribute name="id"           type="xs:string"      use="required"/>
  <xs:attribute name="status"       type="StatusEnumType"/>
  <xs:attribute name="createTime"   type="xs:dateTime"/>
  <xs:attribute name="updateTime"   type="xs:dateTime"/>
  <xs:attribute name="version"      type="xs:string"      fixed="1.0"/>
</xs:complexType>

4. 5 个永远记住的规则(写复合元素永远不会错)

规则说明
子元素必须包在 <xs:sequence> / <xs:all> / <xs:choice>不能直接裸写多个 <xs:element>
属性永远写在 sequence/all/choice 之后顺序不能错
想重复就加 maxOccurs="unbounded" 或写在 <xs:element>两种写法都行
想可选就加 minOccurs="0"默认就是 1(必填)
推荐把可复用的复合结构定义成命名 complexType不要全用匿名类型,方便复用和维护

一句话总结:
复合元素 = <xs:complexType> + <xs:sequence>(放子元素)+ 最后几行 <xs:attribute>(放属性)

需要我直接给你生成某个业务的完整复合元素(用户、商品、订单、支付、地址、物流等),直接告诉我业务名,我 10 秒出成品!

文章已创建 2783

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部