Java: SAX 忽略模式验证
Java: SAX ignores schema validation
我有以下 xml 架构 module.xsd:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="module2">
<xs:complexType>
<xs:sequence>
<xs:element name="temp" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我有以下 xml 文档 module.xml:
<module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
<init-param name="foo" value="boo"/>
</module>
这是我创建解析器的代码:
Schema xmlSchema = null;
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
xmlSchema = schemaFactory.newSchema(getClass().getResource(MODULE_PATH));
if (xmlSchema==null){
System.out.println("Schema NULL");
}else{
System.out.println("Schema NOT NULL");
}
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setSchema(xmlSchema);
parserFactory.setValidating(true);
parserFactory.setNamespaceAware(true);
SAXParser saxParser = parserFactory.newSAXParser();
我得到 Schema NOT NULL
并且我的文件被解析没有任何问题。但是我等待异常,因为模式是错误的。我的错误是什么?
如果解析器遇到架构验证,它不会抛出异常,但会向其 ErrorHandler
报告违规情况,在大多数情况下,这将是传递给 SaxParser.parse()
的 DefaultHandler
:
如果您希望将验证错误作为异常抛出,请重写 DefaultHandler.error
:
saxParser.parse(new File("module.xml"), new DefaultHandler() {
public void error (SAXParseException e) throws SAXException {
throw e;
}
});
我有以下 xml 架构 module.xsd:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="module2">
<xs:complexType>
<xs:sequence>
<xs:element name="temp" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我有以下 xml 文档 module.xml:
<module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
<init-param name="foo" value="boo"/>
</module>
这是我创建解析器的代码:
Schema xmlSchema = null;
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
xmlSchema = schemaFactory.newSchema(getClass().getResource(MODULE_PATH));
if (xmlSchema==null){
System.out.println("Schema NULL");
}else{
System.out.println("Schema NOT NULL");
}
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setSchema(xmlSchema);
parserFactory.setValidating(true);
parserFactory.setNamespaceAware(true);
SAXParser saxParser = parserFactory.newSAXParser();
我得到 Schema NOT NULL
并且我的文件被解析没有任何问题。但是我等待异常,因为模式是错误的。我的错误是什么?
如果解析器遇到架构验证,它不会抛出异常,但会向其 ErrorHandler
报告违规情况,在大多数情况下,这将是传递给 SaxParser.parse()
的 DefaultHandler
:
如果您希望将验证错误作为异常抛出,请重写 DefaultHandler.error
:
saxParser.parse(new File("module.xml"), new DefaultHandler() {
public void error (SAXParseException e) throws SAXException {
throw e;
}
});