【发布时间】:2019-09-05 12:50:28
【问题描述】:
我正在检查 xml 到 xsd 格式。但是,当我尝试使用从该站点获得的以下代码将 xml 格式数据转换为 xsd 时 https://www.tutorialspoint.com/xsd/xsd_validation.htm 我想知道为什么 20 位数字显示长类型,它给了我以下错误
SAX 异常:cvc-maxInclusive-valid:值“29801000199002684333”为 对于 maxInclusive '9223372036854775807' 而言不是方面有效的 输入“长”。
以下代码
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>
【问题讨论】:
-
帐号和银行 BIC 号码并不是真正的数字,就像电话号码不是数字一样。 (它们不是数字,因为您永远不会对它们进行算术运算 - 它们实际上是标识符或标签)。您不应在 XSD 中使用数据类型
long或int对它们进行建模。改用字符串类型,并可能添加诸如正则表达式之类的限制以使其只能包含数字。 -
可能是一个 错误,您的 varchar ('
xsd:string) 似乎是唯一正确的解决方案。 -
杰斯珀爵士,我想你不太了解我。我不这样做。我只得到字符串并将其写入文件,并从文件中生成写入的 xml 到 xsd,借助以下类 XsdGen gen = new XsdGen(); gen.parse(new File("in.xml"));文件输出 = 新文件(“out.xsd”); gen.write(new FileOutputStream(out));然后它会自动写长类型
-
我不能手动操作一切都应该自动
标签: java xml xsd xsd-validation