【发布时间】:2015-07-16 13:26:00
【问题描述】:
我有一个 xml,必须针对 xsd 验证结构和数据类型。但是 xml 中的某些字段具有空值/空值。但是当使用 JAXB 验证 xml 时
"cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'."
此异常是从带有链接 SaxParserError 异常的 JAXB 异常引发的。但我必须接受具有空值的 xml。这些线程 validating an XML schema with empty attributes 和 Element type(long) without content 表明我们必须针对 xsd 修改 xml,以便它应该接受 null/empty 值。
有没有其他方法可以覆盖 ValidationHandler 类和 Unmarshaller 类的方法来接受空值。
【问题讨论】:
-
失败的元素的架构定义是什么样的?
-
什么是 XML 中的“空”值?如果您的 XSD 将元素指定为
xs:integer类型,则该元素中的空值无效。没有办法解决这个问题。您可以将元素设为可选 (minOccurs="0") 并在 XML 中完全省略它。但最后,生产方应该改变,如果它产生这样的空元素。 -
@Seelenvirtuose 我已将 minoccurs = 0。但仍然抛出错误。 “cvc-datatype-valid.1.2.1: '' 不是 'integer' 的有效值。Null 表示空。是的空是无效的。但是如何接受。我不想更改此操作的 XML 模式。是有什么办法吗?
-
Errrrm ...当我说“没有办法解决这个问题”时,它是否如此模棱两可?此外,在声明
minOccurs="0"时,这意味着可以省略该元素。如果它在那里,它仍然不能是空的。这就是 XSD 的目的。如果你不想让你的 XML 符合那个 XSD,那么就不要验证它! -
你为你的元素尝试过 nillable 选项吗? see here
标签: java xml validation parsing jaxb