2009-10-27 9 views
5

Quiero analizar un archivo xml utilizando un SAXParser o XMLReader y verificar que el archivo se ajuste a un archivo xsd específico (new File("example.xsd")).¿Cómo validar un archivo xml contra un archivo xsd dado mientras lo analiza con un analizador de saxofón?

Es fácil

  1. hacer la validación contra un archivo xsd en un paso adicional utilizando un Validator como en this SO answer.

  2. para validar durante el análisis especificando el nombre del xsd como "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation" como en this SO answer.

Pero cómo puedo validar contra un new File("example.xsd")al analizar?

Respuesta

3

Suponiendo Java 5 o superior, establezca el esquema en el SAXParserFactory:

SchemaFactory schemaFactory = SchemaFactory 
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(new File("myschema.xsd")); 
SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
saxFactory.setSchema(schema); 
SAXParser parser = saxFactory.newSAXParser(); 
parser.parse("data.xml", new DefaultHandler() { 
    // TODO: other handler methods 
    @Override 
    public void error(SAXParseException e) throws SAXException { 
    throw e; 
    } 
}); 

usted manejar los errores de validación reemplazando el error method en su manejador y actuar como mejor le parezca.

+0

Parece que el analizador aún usa el esquema definido dentro del archivo xml y no el que he establecido con 'schemaFactory (newSchema (...))'. – tangens

+1

Ese no es el comportamiento que veo (el analizador siempre valida contra el conjunto de esquemas en la fábrica, incluso si uno está configurado en el documento). Sin documentos de muestra/código, es difícil identificar el problema. – McDowell

Cuestiones relacionadas