MinOccurs 0 和 nillable true
MinOccurs 0 and nillable true
在我的 wsdl 中有一个元素:
<xsd:element minOccurs="0" name="birthDate" nillable="true" type="xsd:dateTime"/>
我知道 nillable true 允许空值,这是否意味着它可以允许 xml 空标签?即
<birthDate/>
设置nillable="true"
意味着<birthDate>
标签可以出现如下:
<birthDate xsi:nil="true"/>
但是,由于您还设置了 minOccurs="0"
,您也可以从 XML 中完全省略 <birthDate>
标记,并且它仍然会根据您的 XSD 进行验证。
请注意,根据 XSD 规则,<birthDate/>
或 <birthDate></birthDate>
不被视为 null。
查看 this great blog post 进一步阅读。
将我的观点添加到上述答案中,许多初学者不知道或没有考虑的基本事情是将 xsi 变量与 Schema 实例命名空间绑定。
例如:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" [将此作为属性添加到 xml 开始标记中的任意位置]。
在这种情况下,属性前缀“xsi”必须与 XML 命名空间“http://www.w3.org/2001/XMLSchema-instance”绑定。此绑定可以在任何父元素或根元素本身中完成,在何处进行绑定取决于您希望 xsi 可用的范围。
- 嵌套的to声明中的所有元素都获得相同的值
- 即使您可以使用任何名称来绑定 namespcae,为简洁起见,始终建议使用 xsi for "http://www.w3.org/2001/XMLSchema-instance"
PS :我意识到 xml 命名空间绑定和前缀属性的全部重要性,当我在工作中挣扎时多留了 3 个小时来理解,为什么我的 xml 节点未通过其 xsd 验证,即使在模式定义中存在可空属性的情况下也是如此。
在我的 wsdl 中有一个元素:
<xsd:element minOccurs="0" name="birthDate" nillable="true" type="xsd:dateTime"/>
我知道 nillable true 允许空值,这是否意味着它可以允许 xml 空标签?即
<birthDate/>
设置nillable="true"
意味着<birthDate>
标签可以出现如下:
<birthDate xsi:nil="true"/>
但是,由于您还设置了 minOccurs="0"
,您也可以从 XML 中完全省略 <birthDate>
标记,并且它仍然会根据您的 XSD 进行验证。
请注意,根据 XSD 规则,<birthDate/>
或 <birthDate></birthDate>
不被视为 null。
查看 this great blog post 进一步阅读。
将我的观点添加到上述答案中,许多初学者不知道或没有考虑的基本事情是将 xsi 变量与 Schema 实例命名空间绑定。
例如:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" [将此作为属性添加到 xml 开始标记中的任意位置]。
在这种情况下,属性前缀“xsi”必须与 XML 命名空间“http://www.w3.org/2001/XMLSchema-instance”绑定。此绑定可以在任何父元素或根元素本身中完成,在何处进行绑定取决于您希望 xsi 可用的范围。
- 嵌套的to声明中的所有元素都获得相同的值
- 即使您可以使用任何名称来绑定 namespcae,为简洁起见,始终建议使用 xsi for "http://www.w3.org/2001/XMLSchema-instance"
PS :我意识到 xml 命名空间绑定和前缀属性的全部重要性,当我在工作中挣扎时多留了 3 个小时来理解,为什么我的 xml 节点未通过其 xsd 验证,即使在模式定义中存在可空属性的情况下也是如此。