XSD中如何设置body元素既可匹配指定sequence序列也可匹配空内容
解决方案
你只需要给<xs:sequence>节点添加minOccurs="0"属性即可,调整后的完整XSD配置如下:
<xs:element name="body"> <xs:complexType> <xs:sequence minOccurs="0"> <xs:element name="id" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="type" type="xs:string"/> <xs:element name="user" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
规则说明
修改后正好可以满足你要的两种校验场景:
- 当sequence序列出现1次(默认maxOccurs为1):body标签内必须按顺序包含id、name、type、user四个全部子元素,和你原来的校验逻辑一致
- 当sequence序列出现0次:body标签内没有任何子元素,空标签
<body></body>或自闭合标签<body/>都可以正常通过校验
注:该配置不会允许仅包含部分子元素的不完整body结构,只有全部子元素都存在、或者完全没有子元素两种情况会通过校验,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Matt Klaver
相关产品推荐
相关产品推荐

