1

这是 XML 模式:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="id" type="xs:long" />
</xs:schema>

经过一致性验证的 XML 文件:

<?xml version="1.0" ?>
<id>invalid_data</id>

使用 XML 并应测试一致性的 Java 代码:

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
factory.setSchema(schemaFactory.newSchema(new File(xmlSchema)));
parser = factory.newSAXParser();
MySaxHandler handler = new MySaxHandler();
parser.parse(new File(xmlFile), handler);

在调用此代码期间,NumberFormatException 会charactersMySaxHandler. MySaxHandler 还包含覆盖方法 warning、error 和 fatalError 但它们不会被执行。

我不希望抛出这个 NumberFormatException。我希望根据 Schema 验证数据类型。我该怎么做?

4

1 回答 1

1

我想知道这是否只是一个时间问题。在到达结束元素事件之前,模式验证器无法测试元素的内容,但是在到达结束元素事件之前将文本节点报告给 ContentHandler 。尝试在您的应用程序中屏蔽异常,以查看验证错误是否会在稍后报告。

于 2012-09-10T07:36:25.147 回答