2

在处理 Web 服务响应时,我遇到了 Apache CXF 的解析错误。它归结为一个空元素被返回:

<myValue />

元素定义如下:

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

现在我在 CXF 邮件列表中读到XSD-spec 不允许空值

好吧,没有解决方法,因为它不是错误。空元素对于任何 Decimal 或 Date 类型或类似的东西都无效。
因此,它应该抛出异常。
你期待它做什么?

现在问题来了:在 XML Schema 规范中我究竟在哪里可以找到这个约束?

4

2 回答 2

2

在 XML Schema 规范中我究竟在哪里可以找到这个约束?

http://www.w3.org/TR/xmlschema-2/#float-lexical-representation

浮点值具有由尾数组成的词法表示,后跟可选的字符“E”或“e”,后跟指数。
...
指数和尾数的表示必须遵循整数和小数的词汇规则。
...
特殊值正无穷和负无穷和非数分别具有词汇表示 INF、-INF 和 NaN。

所以xs:float至少需要一个尾数,它是xs:decimal...

decimal 有一个词法表示,由一个有限长度的十进制数字序列 (#x30-#x39) 组成,由句点分隔作为十进制指示符。允许使用可选的前导符号。

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

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

于 2011-02-18T22:47:09.030 回答
1

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

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

然后能够为您的浮动提供一个空元素,而不会导致您的 xml 无效。

上面的示例意味着如果元素为空,则其值为 0。请注意,默认属性不适用于缺失的元素:缺失的元素只是缺失,无论它们是否具有声明的默认值。 http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

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

直到现在我还没有使用过这个,但是为了防止个人误读 w3c 规范,我已经与在线验证器检查是否接受了具有默认值的空 xs:float 元素的 xml(至少通过这个在线验证器:http ://www.freeformatter.com/xml-validator-xsd.html )。

于 2012-06-21T08:52:40.543 回答