XSD中枚举类型通过xs:restriction结合xs:enumeration限定固定取值,仅支持字面量、区分大小写、不可重复,可基于xs:string、xs:integer等基类型定义,支持复用与默认值,但不支持动态计算或通配符。

XSD中定义枚举类型,核心是用 xs:restriction 套一层 xs:enumeration,限定元素或属性只能取指定的几个固定值。它不支持动态计算或引用变量,所有值必须是字面量,且在同一 restriction 下不能重复。
基础写法:内联定义字符串枚举
最常见的是基于 xs:string 限制一组名称值:
- 用
包裹限制逻辑 -
base="xs:string"指定基类型 - 每个
写一个合法取值,value 必须是字符串字面量(如 "ACTIVE"、"INACTIVE"),不能带空格或特殊字符(除非转义)
示例:
支持其他基类型:整数、布尔等
枚举不限于字符串,也可用于 xs:integer、xs:boolean、xs:date 等简单类型,只要值格式匹配即可:
- 整数枚举:value 写纯数字,如
- 布尔枚举:只允许
"true"或"false"(注意是小写字符串) - 日期枚举:value 必须符合 xs:date 格式,如
"2025-01-01"
注意:XSD 不校验语义(比如 2025-02-30 虽格式对但非法),仅做字面匹配。
复用与默认值设置
定义好命名 simpleType 后,可在多个地方复用:
- 在
中通过type="StatusType"引用 - 添加
default="PENDING"可设默认值,解析时若该元素缺失则自动填充 - 若需强制存在且不可为空,配合
minOccurs="1"和nillable="false"
注意事项和常见陷阱
实际使用中容易出错的点:
- 枚举值区分大小写,"Active" 和 "active" 是两个不同值
- 不能在 enumeration 中使用通配符、正则或范围(如 "A*" 或 "1-10"),那是 pattern 或 minInclusive/maxExclusive 的职责
- .NET 的 xsd.exe 工具默认只把基于 xs:string 的枚举转为 C# enum;整数枚举可能被忽略或生成为 string 类型
- Java 或 C# 代码生成工具通常将 value 值映射为常量名,含连字符或空格的 value(如 "IN-PROGRESS")会被转成 InProgress 或加特性标注










