当元素具有空值时如何接受 xsd 与 xml 验证
How to accept xsd vs xml validation when elements having null values
我有一个 xml 并且必须根据 xsd 验证结构和数据类型。但 xml 中的某些字段具有 null/empty 值。但是当使用 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 and Element type(long) without content 表明我们必须针对 xsd 修改 xml 以便它应该接受 null/empty 值。
有没有其他方法可以覆盖 ValidationHandler class 和 Unmarshaller class 的方法以接受空值。
好吧,我猜你试着把
<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
类型。然后您将需要使用自定义绑定来获取整数字段。
我有一个 xml 并且必须根据 xsd 验证结构和数据类型。但 xml 中的某些字段具有 null/empty 值。但是当使用 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 and Element type(long) without content 表明我们必须针对 xsd 修改 xml 以便它应该接受 null/empty 值。
有没有其他方法可以覆盖 ValidationHandler class 和 Unmarshaller class 的方法以接受空值。
好吧,我猜你试着把
<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
类型。然后您将需要使用自定义绑定来获取整数字段。