XSD定义parent_type二选一序列时仅识别首个选项的问题
解决XSD中元素的同类型子元素约束问题
你的核心需求是让<text-parent>只能包含一组同类型的<text>子元素(要么全是utf8_text_type,要么全是xml_text_type),数量在1到n之间,不能混合两种类型。问题出在你之前的xs:choice用法没有正确把「多个同类型text元素」作为一个完整的可选分支。
正确的XSD实现代码
<xs:complexType name="parent_type"> <xs:choice minOccurs="1" maxOccurs="1"> <!-- 分支1:1到n个utf8_text_type类型的<text> --> <xs:element name="text" type="utf8_text_type" minOccurs="1" maxOccurs="unbounded"/> <!-- 分支2:1到n个xml_text_type类型的<text> --> <xs:element name="text" type="xml_text_type" minOccurs="1" maxOccurs="unbounded"/> </xs:choice> </xs:complexType>
关键说明
xs:choice的minOccurs="1"和maxOccurs="1"确保只能选择其中一个分支,不会同时启用两种类型的约束;- 每个分支里的
<xs:element>通过minOccurs="1"和maxOccurs="unbounded"定义了1到任意多个同类型的<text>元素; - 同一个元素名
<text>可以绑定不同的类型,只要它们处于xs:choice的不同分支中,XSD会自动校验子元素的类型一致性,不允许混合两种类型。
常见错误排查
如果你之前的写法是把xs:sequence嵌套在xs:choice里(比如每个sequence只包含单个<text>元素),那只会允许选择单个<text>而不是多个。上述写法直接把重复的同类型元素作为分支,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

