nillable和minOccurs XSD元素属性

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

我正在阅读这篇文章,现在在我的WSDL中,我不确定使用两者是否值得。 这篇文章给出了一个很好的例子来表示你可能在其中散布着空值的数组,因为这只能通过minOccurs="0"来完成。 现在,我一直在讨论的惯例是,如果一个元素不是可选的,那么它是不可能的。 根据我的理解和我的问题所在的区别在于,通过将nillable属性应用于某个元素,我说您可以传递与NULL值相等的XSD? 否则,一个没有nillable属性的元素,必须在它的限制内有一个值吗?

您需要决定是否将XML视为XML,或者您是否将XML视为从这里传输Java(或其他)对象的方式。

在XML中,nillable允许构造<myelement xsi:nil='true'/>作为显式缺less值的指示符,如SQL NULL。 这在语义上与<myelement/> 。 而这两者根本就没有区别。 所以,在查看XML时,必须区分四种情况:

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

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

对于从Objectinheritance的任何Java项目,JAXB和其他映射技术都需要处理空值的方法。 Nillable是做到这一点的方法。 如果你禁止可以作为对象的东西,工具包会恼人地使用一个数组来find表示不存在的方法。

另一方面,如果你有一个数组,请记住数组本身是一个对象,可以为null。 所以,每个工具包都必须区分一个零元素数组和null。

另一方面,如果你有一个原始types(例如int ),nillable会导致问题,因为没有从xsi:nil映射到原语。