gpt4 book ai didi

java - 当元素具有空值时如何接受 xsd vs xml 验证

转载 作者:行者123 更新时间:2023-11-29 03:09:39 24 4
gpt4 key购买 nike

我有一个 xml,必须根据 xsd 验证结构和数据类型。但 xml 中的某些字段具有 null/空值。但是当使用 JAXB 验证 xml 时

"cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'."

此异常是从具有链接 SaxParserError 异常的 JAXB 异常中抛出的。但我必须接受带有空值的 xml。这些线程 validating an XML schema with empty attributesElement type(long) without content显示我们必须修改关于 xsd 的 xml,以便它应该接受 null/空值。

有没有其他方法可以覆盖 ValidationHandler 类和 Unmarshaller 类的方法以接受空值。

最佳答案

嗯,我猜你试着把

<myinteger></myinteger>

在您的 XML 中,但有一个 XSD,例如:

<element name="myinteger" type="integer" />

<element minOccurs="0" name="myinteger" type="integer" />

JAXB 是对的。就 XSD 验证而言,这是错误的,因此您必须更改 XML、更改 XSD 或禁用验证(仍然会出错但不会崩溃)。 MinOccurs="0" 表示接受该元素根本不存在(删除所有 myinteger 标记)。这并不意味着接受内容为空的标签。内容必须是整数。空字符串不是整数。

设置 nillable = true 也不起作用。这意味着这将被接受:

<myinteger xsi:nil="true"></myinteger>

但是你必须添加这个 xsi:nil="true"。

如果你确实想接受这个:

<myinteger></myinteger>

您可以按如下方式更改您的 XSD:

<element name="myinteger" type="IntegerOrNothing" />

<xsd:simpleType name="IntegerOrNoting">
<xsd:union memberTypes="xsd:integer">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="" />
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>

如果您使用 Jaxb 从 XSD 生成 bean,则此类型的字段默认为 String 类型。然后,您将需要使用自定义绑定(bind)来获取整数字段。

关于java - 当元素具有空值时如何接受 xsd vs xml 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com