使用Schema验证XML时为什么不验证数据类型?

时间:2012-09-09 19:44:28

标签: java xml xsd saxparser

这是XML Schema:

<?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以characters MySaxHandler方法抛出。 MySaxHandler还包含覆盖方法warning,error和fatalError,但它们不会被执行。

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

1 个答案:

答案 0 :(得分:1)

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