新闻中心

如何在XSD中创建枚举类型,限制元素只能取预定义列表中的值?

2025-12-07
浏览次数:
返回列表
XSD中枚举类型通过xs:restriction嵌套xs:enumeration定义,需基于简单类型限制值域;支持内联定义或命名复用,可应用于字符串、整数等类型,但值必须唯一且为字面量。

如何在xsd中创建枚举类型,限制元素只能取预定义列表中的值?

在XSD中创建枚举类型,就是用 <restriction></restriction> 套住 <enumeration></enumeration>,把允许的值一个个列出来。核心是定义一个简单类型(simpleType),再在里面限制取值范围。

基础写法:内联定义枚举

直接在元素声明里定义枚举类型,适合只用一次的场景:

<xs:element name="status">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="draft"/>
      <xs:enumeration value="pending"/>
      <xs:enumeration value="approved"/>
      <xs:enumeration value="rejected"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

这样,<status></status> 元素的内容只能是这四个字符串之一,大小写敏感,空白也不允许(除非显式加上 xs:whiteSpace value="collapse")。

复用写法:命名简单类型 + 枚举

如果多个地方要用同一组取值,建议单独定义命名类型,便于维护和复用:

<xs:simpleType name="OrderStatus">
  <xs:restriction base="xs:string">
    <xs:enumeration value="new"/>
    <xs:enumeration value="shipped"/>
    <xs:enumeration value="delivered"/>
    <xs:enumeration value="cancelled"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="orderStatus" type="OrderStatus"/>

注意:类型名首字母大写是常见约定,有助于区分内置类型。

Openflow Openflow

一键极速绘图,赋能行业工作流

Openflow 88 查看详情 Openflow

支持数字或布尔枚举

枚举不限于字符串。比如限制为整数:

<xs:simpleType name="PriorityLevel">
  <xs:restriction base="xs:integer">
    <xs:enumeration value="1"/>
    <xs:enumeration value="2"/>
    <xs:enumeration value="3"/>
  </xs:restriction>
</xs:simpleType>

布尔值也可以枚举,但通常不必要(因为 xs:boolean 本身只接受 true/false);若需语义化,可用字符串枚举如 "yes"/"no""on"/"off"

小贴士:避免常见坑

  • 每个 <enumeration></enumeration>value 属性必须是字面量,不能是表达式或变量
  • 重复的 value 会导致验证失败(XSD处理器会报错)
  • 如果想让空字符串也合法,需额外加一条 <enumeration value=""></enumeration>
  • 中文、特殊符号、带空格的值都可以,但要确保 XML 实例中完全一致(包括空格和大小写)

基本上就这些。枚举本质是值域约束,写清楚、保持唯一、注意类型匹配,就能稳稳生效。

以上就是如何在XSD中创建枚举类型,限制元素只能取预定义列表中的值?的详细内容,更多请关注其它相关文章!


# 有哪些  # 合肥滨湖区网站营销推广  # 湖北公司网站建设推广  # 岳阳贸易网站建设  # 重庆抖音房产seo  # 奉化区网站推广软件  # 泸州seo网络推广营销  # 黄冈正规seo  # 泰州标准网店营销推广  # 阿信seo抖音搜索不到  # 徐州云推广网站开发公司  # 多个  # 就能  # 枚举类型  # 也不  # 如何实现  # 何为  # 复用  # 列表中  # 值域  # 如何在  # red  # app  # 处理器  # xsd 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  铁路12306的积分有效期是多久_铁路12306积分有效期说明  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  在Qt QML中通过Python字典动态更新TextEdit内容的教程  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  Lar*el Form Request中唯一性验证在更新操作中的正确实现  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  163邮箱登录密码 163邮箱忘记密码找回  外媒分析《GTA6》定价:卖100美元可以但真没必要!  CSS实现侧边栏导航项全宽圆角悬停背景效果  msn官网入口地址手机版 msn官方网站手机最新链接  Django表单提交验证失败后保持字段值不刷新  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  J*a中实现Go语言select通道多路复用机制  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  构建轻量级网站内部消息系统:Formspree 集成指南  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  Angular中父组件异步更新子组件复选框状态的实践指南  163邮箱注册官网 免费申请163个人邮箱  4399免费游戏网址入口 4399小游戏免费入口点开即玩  高德地图公交到站提醒失败如何解决 高德提醒权限设置  QQ官网正版登录链接 QQ在线登录入口最新  c++20的std::jthread是什么_c++可中断线程与RAII式管理  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  在Pyomo中实现基于变量的条件约束:Big-M方法详解  Python字典中优雅地迭代剩余元素的方法  在命令行怎么运行html项目_命令行运行html项目方法【教程】  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  淘宝网网页版登录入口 淘宝官方网页版快捷登录  excel怎么制作工资条 excel快速生成工资条的方法  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  b站怎么取消点赞_b站点赞取消操作方法  魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  J*aScript中赋值与自增运算符的复杂交互与执行机制  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换 

搜索