XSD中禁止primitve数据类型的空元素

XSD中禁止primitve数据类型的空元素,xsd,cxf,xsd-validation,Xsd,Cxf,Xsd Validation,我在处理webservice响应时遇到Apache CXF解析错误。归根结底,返回的是一个空元素: <myValue /> 元素定义如下: <xsd:element name="myValue" type="xsd:float" minOccurs="0"> 现在我在CXF邮件列表上看到: 嗯,没有一个解决办法 这是因为它不是一个bug。空的 元素对任何小数点无效 或者日期类型之类的。 因此,它应该抛出一个异常。 你期望它做什么 现在问题来了:在XML模式规范

我在处理webservice响应时遇到Apache CXF解析错误。归根结底,返回的是一个空元素:

<myValue />

元素定义如下:

<xsd:element name="myValue" type="xsd:float" minOccurs="0">

现在我在CXF邮件列表上看到:

嗯,没有一个解决办法 这是因为它不是一个bug。空的 元素对任何小数点无效 或者日期类型之类的。
因此,它应该抛出一个异常。
你期望它做什么

现在问题来了:在XML模式规范中,我到底在哪里可以找到这个约束

在XML模式规范中,在哪里可以找到这个约束

浮点值具有词汇意义 由一个 尾数后接尾数(可选) 字符“E”或“E”,后跟 指数。

指数和指数的表示 尾数必须遵循词汇规则 用于整数和小数。

特殊的价值观是积极的和积极的 负无穷大与非一个数 具有词汇表示形式INF,-INF 和南

所以
xs:float
至少需要一个尾数,即
xs:decimal

decimal有一个词汇表示法 由有限长序列组成 小数位数(#x30-#x39) 以小数点形式由句点分隔 指标。一个可选的前导符号是 允许

…并且空字符串不是有效的
xs:decimal


如果没有此元素的值,则应尽可能不包含此元素。您的架构似乎允许忽略此元素,因为
minOccurs
具有值
0
。其他解决方案是插入合适的替换值,如
0
NaN

这不是一个确定的约束。 您应该能够将xsd更改为

<xsd:element name="myValue" type="xsd:float" minOccurs="0" default="0" />

然后能够为float提供一个空元素,而不会导致xml无效

上面的示例表示,如果元素为空,则其值为0。注意,默认属性不适用于缺少的元素:缺少的元素只是缺少,不管它们是否具有声明的默认值。

如果元素显示时没有任何内容,架构处理器将为元素提供一个与默认属性相同的值。但是,如果该元素没有出现在实例文档中,则模式处理器根本不提供该元素

到目前为止,我还没有使用过它,但为了防止个人误读w3c规范,我已经向在线验证器检查过,是否接受了带有空xs:float元素且具有默认值的xml(至少这个在线验证器:)