XSD「仅含文本」(Text-Only / Simple Content)最全、最实用的总结
—— 元素里只能写纯文本,不能有子元素,也不能有属性(除了极特殊情况)
这类元素在实际项目中超级常见,典型例子:
<name>张三</name>
<price>99.99</price>
<remark>急件,请当天发货</remark>
<status>PAID</status>
<code>SH123456</code>
1. 官方分类:这叫「简单内容元素」(simpleContent)
但实际项目里大家直接叫「仅含文本元素」或「文本节点」。
2. 3 种最常用、最标准的写法(背会这 3 种就天下无敌)
| 写法 | 推荐度 | XSD 代码 | 对应合法 XML | 说明 |
|---|---|---|---|---|
| 1 | 5星(最常用) | <xs:element name="name" type="xs:string"/> | <name>张三</name> | 直接用内置类型,99% 项目都这样写 |
| 2 | 5星(推荐) | 先定义自定义类型,再引用<xs:element name="price" type="MoneyType"/> | <price>99.99</price> | 想加限制(小数位、正则、枚举)时必用 |
| 3 | 4星(了解即可) | 用 simpleContent 扩展(允许加属性) 见下方高级用法 | <price currency="CNY">99.99</price> | 极少数需要“文本+属性”时才用 |
3. 企业级真实模板(直接复制到项目里用)
<!-- 最常见的一组「仅含文本」元素(90% 系统都长这样)-->
<xs:element name="id" type="xs:string"/> <!-- 主键/编码 -->
<xs:element name="name" type="xs:string"/> <!-- 名称 -->
<xs:element name="code" type="xs:string"/> <!-- 业务编码 -->
<xs:element name="price" type="MoneyType"/> <!-- 金额(推荐自定义)-->
<xs:element name="quantity" type="xs:positiveInteger"/> <!-- 数量 -->
<xs:element name="status" type="OrderStatusType"/> <!-- 枚举状态 -->
<xs:element name="remark" type="xs:string" minOccurs="0"/> <!-- 备注,可选 -->
<xs:element name="createTime" type="xs:dateTime"/> <!-- 时间 -->
<xs:element name="mobile" type="MobileType"/> <!-- 手机号(正则)-->
<xs:element name="idCard" type="IdCardType"/> <!-- 身份证(正则+长度)-->
<!-- 常用自定义文本类型(强烈建议这样定义)-->
<!-- 金额:最多2位小数 -->
<xs:simpleType name="MoneyType">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<!-- 订单状态枚举 -->
<xs:simpleType name="OrderStatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="PENDING"/>
<xs:enumeration value="PAID"/>
<xs:enumeration value="SHIPPED"/>
<xs:enumeration value="COMPLETED"/>
<xs:enumeration value="CANCELLED"/>
</xs:restriction>
</xs:simpleType>
<!-- 中国手机号 -->
<xs:simpleType name="MobileType">
<xs:restriction base="xs:string">
<xs:pattern value="1[3-9]\d{9}"/>
</xs:restriction>
</xs:simpleType>
4. 高级用法:文本 + 属性(极少用,但你得认识)
<!-- 允许写 <price currency="CNY">99.99</price> -->
<xs:element name="price">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="currency" type="xs:string" default="CNY"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
警告:99% 的企业规范和 WebService 都禁止这种写法!(因为破坏了“纯数据”原则)
能用子元素就用子元素,千万别用 simpleContent + attribute!
5. 一句话终极总结(永远记住这句)
「仅含文本」元素 = 要么直接写 type="内置或自定义简单类型",要么你就不配叫仅含文本!
正确(推荐):
<xs:element name="price" type="xs:decimal"/>
<xs:element name="status" type="OrderStatusType"/>
错误(大厂直接打回去):
<xs:element name="price">
<xs:complexType>
<xs:simpleContent>…</xs:simpleContent> <!-- 除非特别需求,禁止! -->
</xs:complexType>
</xs:element>
记住:大厂 99.9% 的「仅含文本」字段都直接用 type="xxx" 一行搞定!
需要我立刻给你生成任意业务的「仅含文本」字段列表(商品价格、订单状态、用户手机号、物流单号、支付方式等),告诉我业务名,5 秒出完整 XSD!