XSD 仅含元素

XSD「仅含元素」(Only Elements / Element-Only Content)最清晰、最实用总结

—— 既没有属性,也没有文本,只有子元素(最常见、最标准的复合元素)

这类元素在企业级 XML、WebService、配置文件中占比 80% 以上,典型例子:

<person>
  <name>张三</name>
  <age>28</age>
  <email>zs@example.com</email>
</person>

<order>
  <orderId>O20251128001</orderId>
  <customer>…</customer>
  <items>…</items>
  <total>999.99</total>
</order>

1. 标准写法(99% 项目都长这样)

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>                     <!-- 顺序固定(最常用) -->
      <xs:element name="name"  type="xs:string"/>
      <xs:element name="age"   type="xs:int"/>
      <xs:element name="email" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

这就是“仅含元素”的终极公式:
<xs:complexType> + <xs:sequence>(或其他组合器) + 若干 <xs:element> + 完全没有 <xs:attribute>

2. 4 种最常见“仅含元素”变体(直接背)

场景XSD 关键代码XML 示例
顺序固定(最最最常用)<xs:sequence>必须按 name → age → email 顺序
顺序随意(所有字段可选)<xs:all>(每个子元素必须 minOccurs=”01″)
任选其一<xs:choice>手机号或座机二选一
可重复(一对多子表)maxOccurs="unbounded"<order><item>…</item><item>…</item></order>

3. 企业级真实模板(直接复制到项目里)

<!-- 用户(最经典的仅含元素)-->
<xs:complexType name="UserType">
  <xs:sequence>
    <xs:element name="id"       type="xs:string"/>
    <xs:element name="name"     type="xs:string"/>
    <xs:element name="gender"   type="GenderType"/>
    <xs:element name="birthday" type="xs:date" minOccurs="0"/>
    <xs:element name="phones"   minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="phone" type="xs:string" maxOccurs="un  unbounded"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

<!-- 订单(一对多经典结构)-->
<xs:complexType name="OrderType">
  <xs:sequence>
    <xs:element name="orderId"    type="xs:string"/>
    <xs:element name="customer"   type="CustomerType"/>
    <xs:element name="orderDate"  type="xs:dateTime"/>
    <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="totalAmount" type="xs:decimal"/>
    <xs:element name="remark"       type="xs:string" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

4. 永远记住的 3 个铁律(写“仅含元素”永远不会错)

  1. 必须有 <xs:complexType>
  2. 必须有 <xs:sequence> / <xs:all> / <xs:choice> 中的一个
  3. 绝对不能出现 <xs:attribute>(哪怕一个也不行!)

只要违反上面任意一条,就不再是“仅含元素”了。

5. 常见错误 vs 正确写法

错误写法正确写法(仅含元素)后果
加了 <xs:attribute>删掉所有 attribute变成“元素+属性”
没包 <xs:sequence> 直接写 element必须包在 sequence/all/choice 里验证直接报错
用了 <xs:simpleContent> 或 mixed只能用 complexContent + sequence变成可含文本

一句话总结:
“仅含元素” = complexType + sequence/all/choice + 纯子元素 + 零属性
大厂 90% 的业务对象都是这种最干净、最标准的结构!

需要我立刻给你生成任意业务的“仅含元素”结构(商品、地址、支付、发票、物流等),告诉我业务名,10 秒出成品!

文章已创建 2783

发表回复

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

相关文章

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

返回顶部