Java 为什么数据类型不是';在使用架构验证XML时未验证?

Java 为什么数据类型不是';在使用架构验证XML时未验证?,java,xml,xsd,saxparser,Java,Xml,Xsd,Saxparser,以下是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> 在调用此代码期间,myaxhandler的characters方法中会抛出NumberFormatException。MySaxH

以下是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>
在调用此代码期间,
myaxhandler
characters
方法中会抛出NumberFormatException。MySaxHandler还包含重写的方法warning、error和fatalError,但它们不会被执行


我不想抛出这个数字格式异常。我希望根据模式验证数据类型。我该怎么做呢?

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

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

是否应该使用验证类/方法而不是解析方法?下面是一个示例:您有
factory.setValidating(false)以上。那是打字错误吗?您不想验证
true
吗?@andrewcooke
factory.setValidating
用于DTD验证OK,对不起。这可能也是错误的,但是您是否尝试过设置相关的sax特性?它们列在中,这个(非常旧,使用xerces 2)示例表明,如果您使用验证类/方法而不是解析方法,可能需要它们(特别是,有一个默认值未指定的验证功能)?下面是一个示例:您有
factory.setValidating(false)以上。那是打字错误吗?您不想验证
true
吗?@andrewcooke
factory.setValidating
用于DTD验证OK,对不起。这可能也是错误的,但是您是否尝试过设置相关的sax特性?它们列在中,这个(非常旧,使用xerces 2)示例表明可能需要它们(特别是,有一个验证功能,其默认值未指定)。是的,如果我屏蔽异常,实际上会执行验证。非常感谢。但在
字符
方法中隐藏这个异常对我来说似乎很奇怪。这真的是我应该做的吗?嗯,我认为除了将内容复制到缓冲区之外,不应该在characters()方法中做任何事情。请记住,解析器可以将内容分解为对characters()的多个调用,因此只有在调用endElement()时,您才知道您已经获得了所有内容。是的,如果我屏蔽了异常,则实际上会执行验证。非常感谢。但在
字符
方法中隐藏这个异常对我来说似乎很奇怪。这真的是我应该做的吗?嗯,我认为除了将内容复制到缓冲区之外,不应该在characters()方法中做任何事情。请记住,解析器可以将内容分解为对characters()的多个调用,因此只有在调用endElement()时,您才知道您已经获得了所有内容。
<?xml version="1.0" ?>
<id>invalid_data</id>
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);