XSD中minOccurs和maxOccurs属性控制元素或模型组在XML中出现的最少和最多次数,必须写在<xs:element>或<xs:sequence>等粒子上,取值为非负整数或unbounded,默认值分别为1和1。

XSD 中用 minOccurs 和 maxOccurs 属性控制元素在 XML 实例中允许出现的最少和最多次数,它们必须写在 <xs:element> 或 <xs:sequence> 等粒子(particle)上。
基本语法和默认值
这两个属性只能是非负整数,或 unbounded(表示无上限):
-
minOccurs="0":可选,不出现也合法 -
minOccurs="1":默认值,必须出现至少一次 -
maxOccurs="1":默认值,最多出现一次 -
maxOccurs="unbounded":可重复任意多次
直接作用于单个元素
最常见的是在 <xs:element> 上设置,适用于全局或局部声明的元素:
<xs:element name="phone" type="xs:string" minOccurs="0" maxOccurs="3"/>
表示 <phone> 最少出现 0 次、最多 3 次。XML 中可以有零个、一个、两个或三个 <phone> 元素(顺序按 schema 中定义)。
作用于模型组(sequence/choice/all)
当多个元素需统一控制出现次数时,可以把它们包进 <xs:sequence> 等,并在该组上设 minOccurs/maxOccurs:
<xs:sequence minOccurs="2" maxOccurs="unbounded"> <xs:element name="item" type="xs:string"/> <xs:element name="qty" type="xs:integer"/> </xs:sequence>
这表示“item + qty”这个组合至少出现两次,可重复无限次。每次出现都必须同时包含 <item> 和 <qty>,且顺序固定。
注意点和常见误区
这些属性不能用于类型定义(<xs:complexType> 或 <xs:simpleType>),只对“出现位置”有效;也不能出现在 <xs:attribute> 上(属性不支持重复,用 use="optional" 或 use="required" 控制)。
如果 minOccurs > maxOccurs(比如 minOccurs="2" maxOccurs="1"),XSD 就无效,解析器会报错。
基本上就这些。不复杂但容易忽略默认值和作用范围。









