为什么这个值是'29801000199002684333' long in generation of xsd why not varchar
Why this value is '29801000199002684333' long in generation of xsd why not varchar
我正在检查 xml 到 xsd 格式。但是当我尝试使用从该站点 https://www.tutorialspoint.com/xsd/xsd_validation.htm 获得的以下代码将 xml 格式数据转换为 xsd 时
我想知道为什么 20 位数字显示长类型并且它给了我以下错误
SAX Exception: cvc-maxInclusive-valid: Value '29801000199002684333' is
not facet-valid with respect to maxInclusive '9223372036854775807' for
type 'long'.
使用以下代码
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("out.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File("in.xml")));
如何避免这个问题我想以 varchar 类型而不是 long 类型查看此数据
XSD格式
<xsd:sequence>
<xsd:element name="account" minOccurs="0" type="xsd:long"/>
<xsd:element name="branchBIC" minOccurs="0" type="xsd:int"/>
<xsd:element name="branchCode" minOccurs="0" type="xsd:int"/>
<xsd:element name="currencyIsoCode" minOccurs="0" type="xsd:normalizedString"/>
</xsd:sequence>
XML格式
<account>40700810256895634168</account>
<branchBIC>040037470</branchBIC>
<branchCode>1</branchCode>
<currencyIsoCode>RUR</currencyIsoCode>
您的整个 post 大约是 XML、XSD 和 Java,但您的问题在于其中的 none。您的 posted XSD 说 account
是类型 xsd:long
,但是您的 XML 的 account
值超过了 xsd:long
。因此,根据您的 XSD,您的 XML 无效。
从您的评论来看,您似乎对正在使用的工具选择了类型 xsd:long
而不是 xsd:string
感到不高兴。这应该是您问题的突出部分,而不是隐藏在评论中,因为您使用的 XsdGen
class 是您问题的基础。
当您从 XML 实例生成模式时,您要求该工具进行大量猜测。例如,您要求它猜测 3872-12-14 是一个日期还是只是一些随机字符串。它必须进行的示例越多,它就越有可能猜对,但有时它总是会出错。当它看到一个帐号时,它如何知道它是一个整数还是一个字符串?区别很重要,因为如果它选择 xs:integer,那么前导零将被认为是无关紧要的,并且会丢失。因此,所有用于模式生成的工具都需要人工检查输出并对其进行微调。有些工具可能比其他工具做出更好的猜测,但其中 none 永远是完美的,因为该过程需要对数据进行语义理解。
我正在检查 xml 到 xsd 格式。但是当我尝试使用从该站点 https://www.tutorialspoint.com/xsd/xsd_validation.htm 获得的以下代码将 xml 格式数据转换为 xsd 时 我想知道为什么 20 位数字显示长类型并且它给了我以下错误
SAX Exception: cvc-maxInclusive-valid: Value '29801000199002684333' is not facet-valid with respect to maxInclusive '9223372036854775807' for type 'long'.
使用以下代码
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("out.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File("in.xml")));
如何避免这个问题我想以 varchar 类型而不是 long 类型查看此数据
XSD格式
<xsd:sequence>
<xsd:element name="account" minOccurs="0" type="xsd:long"/>
<xsd:element name="branchBIC" minOccurs="0" type="xsd:int"/>
<xsd:element name="branchCode" minOccurs="0" type="xsd:int"/>
<xsd:element name="currencyIsoCode" minOccurs="0" type="xsd:normalizedString"/>
</xsd:sequence>
XML格式
<account>40700810256895634168</account>
<branchBIC>040037470</branchBIC>
<branchCode>1</branchCode>
<currencyIsoCode>RUR</currencyIsoCode>
您的整个 post 大约是 XML、XSD 和 Java,但您的问题在于其中的 none。您的 posted XSD 说 account
是类型 xsd:long
,但是您的 XML 的 account
值超过了 xsd:long
。因此,根据您的 XSD,您的 XML 无效。
从您的评论来看,您似乎对正在使用的工具选择了类型 xsd:long
而不是 xsd:string
感到不高兴。这应该是您问题的突出部分,而不是隐藏在评论中,因为您使用的 XsdGen
class 是您问题的基础。
当您从 XML 实例生成模式时,您要求该工具进行大量猜测。例如,您要求它猜测 3872-12-14 是一个日期还是只是一些随机字符串。它必须进行的示例越多,它就越有可能猜对,但有时它总是会出错。当它看到一个帐号时,它如何知道它是一个整数还是一个字符串?区别很重要,因为如果它选择 xs:integer,那么前导零将被认为是无关紧要的,并且会丢失。因此,所有用于模式生成的工具都需要人工检查输出并对其进行微调。有些工具可能比其他工具做出更好的猜测,但其中 none 永远是完美的,因为该过程需要对数据进行语义理解。