Java 十进制值为0E-8
我们正在用Java1.8和WebLogic12c中的XSD验证XML,但我们面临的问题是0E-8不是十进制的有效值 下面是我的XML:Java 十进制值为0E-8,java,xml,validation,xsd,weblogic12c,Java,Xml,Validation,Xsd,Weblogic12c,我们正在用Java1.8和WebLogic12c中的XSD验证XML,但我们面临的问题是0E-8不是十进制的有效值 下面是我的XML: <?xml version="1.0" encoding="UTF-8"?> <isns:Envelope xmlns:isns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pkp-core=&qu
<?xml version="1.0" encoding="UTF-8"?>
<isns:Envelope xmlns:isns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:pkp-core="http://tracx.de/pkp/interfaces/core/1.0"
xmlns:pkp-msg="http://tracx.de/pkp/interfaces/msg/1.0">
<isns:Header/>
<isns:Body>
<pkp-msg:ABC>
<pkp-msg:test>
<pkp-core:oops>
<pkp-core:XYZ>0.00000000</pkp-core:XYZ>
<pkp-core:billi>period</pkp-core:bill>
<pkp-core:check>0.90225</pkp-core:check>
</pkp-core:oops>
</pkp-msg:test>
</pkp-msg:ABC>
</isns:Body>
</isns:Envelope>
无法复制
这不是一个答案,而是这样写的,所以它可以包含一个 以下代码已在上进行了测试:
- OpenJDK jdk1.7.0_75
- Oracle jdk1.8.0_181
- OpenJDK jdk-11.0.2
- OpenJDK jdk-14
导入java.io.StringReader;
导入javax.xml.xmlstants;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamSource;
导入javax.xml.validation.Schema;
导入javax.xml.validation.SchemaFactory;
导入javax.xml.validation.Validator;
导入org.w3c.dom.Document;
导入org.xml.sax.InputSource;
公开课考试{
公共静态void main(字符串[]args)引发异常{
字符串xml=“\n”+
“0.00000000\n”+
"";
DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder=domFactory.newDocumentBuilder();
documentdocument=domguilder.parse(新的InputSource(新的StringReader(xml));
System.out.println(“XYZ=“+document.getElementsByTagName(“XYZ”).item(0.getTextContent());
字符串xsd=“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
"";
SchemaFactory SchemaFactory=SchemaFactory.newInstance(xmlstants.W3C\u XML\u SCHEMA\u NS\u URI);
Schema Schema=schemaFactory.newSchema(新的StreamSource(新的StringReader(xsd));
Validator Validator=schema.newValidator();
validator.validate(新的DOMSource(文档));
System.out.println(“验证成功”);
}
}
输出
XYZ=0.00000000
验证成功
0.00000000
按BigDecimal
进行解析时,它是一个数字0
,其刻度应该是8,但BigDecimal
的方法将其输出为0E-8
,这是有充分证明的。您没有指定拒绝该值的原因;是因为中的零值无效,还是因为不允许使用该值?实际的XML模式指定了什么?hi@Andreas。在XSD中,我们进行了验证,比如不解释XSD,在问题中显示它。仅相关部分就足够了。仅供参考:值0.00000000
是有效的xsd:decimal
值,因此要么您没有您认为拥有的值,要么xsd验证器有错误。我们在java 1.6中使用上述验证方法,它工作正常,java 1.8的问题。因此,您可以建议的任何替代方法,请非常感谢,并清除我所有的doudts@Andreas
javax.xml.validation.Validator validator = schema.newValidator();
validator.setErrorHandler(new EUBatchValidationHandler());
validator.validate(source);