Java 当元素具有空值时,如何接受xsd与xml验证

Java 当元素具有空值时,如何接受xsd与xml验证,java,xml,validation,parsing,jaxb,Java,Xml,Validation,Parsing,Jaxb,我有一个xml,必须根据xsd验证结构和数据类型。但是xml中的某些字段具有null/空值。但是当使用JAXB验证xml时 “cvc数据类型有效。1.2.1:“”不是“整数”的有效值。” 此异常是从带有链接SaxParserError异常的JAXB异常引发的。但是我必须接受带有空值的xml。这些线 并且显示了我们必须修改关于xsd的xml,以便它能够接受null/empty值 是否有其他方法可以覆盖ValidationHandler类和Unmarshaller类的方法以接受空值。我猜您试图将 &

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

“cvc数据类型有效。1.2.1:“”不是“整数”的有效值。”

此异常是从带有链接SaxParserError异常的JAXB异常引发的。但是我必须接受带有空值的xml。这些线 并且显示了我们必须修改关于xsd的xml,以便它能够接受null/empty值


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

我猜您试图将

<myinteger></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
。然后,您需要使用自定义绑定来获取整数字段。

我猜您试图将

<myinteger></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中的“null”值是什么?如果XSD将元素指定为类型为
xs:integer
,则该元素中的空值无效。这是没有办法的。您可以将元素设置为可选(
minOccurs=“0”
)并在XML中完全忽略它。但最后,如果生成这样的空元素,则生成端应该发生更改。@Seelenvirtuose我已使minoccurs=0。但仍然会抛出错误。“cvc数据类型有效。1.2.1:“”不是“整数”的有效值。Null表示为空。Yes empty无效。但如何接受。我不想更改此操作的XML模式。有什么办法吗?Errrrm…当我说“没有办法”时是否太含糊不清?另外,当声明
minOccurs=“0”“
这意味着可以省略该元素。如果它在那里,它也不能是空的。这就是XSD的目的。如果您不想让XML符合XSD,那么就不要验证它!您是否为您的元素尝试过nillable选项?失败元素的模式定义是什么样子的?XML中的“null”值是什么?如果XSD将元素指定为类型为
xs:integer
,则该元素中的空值无效。这是没有办法的。您可以将元素设置为可选(
minOccurs=“0”
)并在XML中完全忽略它。但最后,如果生成这样的空元素,则生成端应该发生更改。@Seelenvirtuose我已使minoccurs=0。但仍然会抛出错误。“cvc数据类型有效。1.2.1:“”不是“整数”的有效值。Null表示为空。Yes empty无效。但如何接受。我不想更改此操作的XML模式。有什么办法吗?Errrrm…当我说“没有办法”时是否太含糊不清?另外,当声明
minOccurs=“0”“
这意味着可以省略该元素。如果它在那里,它也不能是空的。这就是XSD的目的。如果您不想让XML符合XSD,那么就不要验证它!您是否为您的元素尝试过nillable选项?还有一件事,我的xml包含的数据是整数,它包含的字符串或字符值是null。如何在没有jaxbI中的xsd的情况下进行验证?我不明白这里的问题是什么?还有一件事,我的xml包含数据,数据为整数,字符串或字符值为null。如何在没有jaxbI中的xsd的情况下进行验证不明白您的问题是什么?