我来回设置一个元素为minOccurs="0"nillable="true"

我正在阅读this文章,现在在WSDL中我不确定同时使用两者是否值得。本文提供了一个很好的示例,表示数组中可能散布着空值的数组,因为仅使用minOccurs="0"不能做到这一点。现在,我一直遵循的约定是,如果元素不是可选元素,则该元素不可为零。
据我了解,问题出在哪里,不同之处在于,通过将nillable属性应用于元素,我是说您可以传递等效于NULL值的XSD?否则,没有nillable属性的元素必须具有在其限制范围内的值吗?

最佳答案

您需要确定是将XML视为XML,还是将XML作为从此处到那里传输Java(或其他)对象的方式。

在XML中,nillable允许将<myelement xsi:nil='true'/>构造用作显式缺少值的指示符,例如SQL NULL。这在语义上与<myelement/>不同。两者根本没有区别。因此,在查看XML时,必须区分四种情况:

<!-- nothing -->
<myElement attr1='true'>some content</myElement>
<myElement/>
<myElement xsi:nil='true'/>

另一方面,如果您主要关注Java(也许是因为使用的是SOAP),那么您需要考虑如何来回映射Java对象。

对于从Object继承的任何Java项目,JAXB和其他映射技术都需要一种处理空值的方法。做到这一点的方法才是Nillable。如果您禁止在可能是对象的对象上使用nillable,则工具包会烦人地使用数组来查找表示缺失的方法。

另一方面,如果您有一个数组,请记住该数组本身是一个对象,并且可以为null。因此,每个工具包都必须将零元素数组与空值区分开。

另一方面,如果您具有基本类型(例如int),则nillable会导致问题,因为没有从xsi:nil到基本类型的映射。

关于xml - Nillable和minOccurs XSD元素属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1903062/

10-09 15:58