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 可用的范围。

PS :我意识到 xml 命名空间绑定和前缀属性的全部重要性,当我在工作中挣扎时多留了 3 个小时来理解,为什么我的 xml 节点未通过其 xsd 验证,即使在模式定义中存在可空属性的情况下也是如此。