2010-06-03 14 views

Respuesta

11

lanzar una excepción en el controlador y la captura en el bloque de código donde se inició el análisis sintáctico:

try { 
    ... 
    xmlReader.parse(); 
} catch (SAXException e) { 
    if (e.Cause instanceof BreakParsingException) { 
     // we have broken the parsing process 
     .... 
    } 
} 

Y en su DocumentHandler:

public void startElement(String namespaceURI, 
        String localName, 
        String qName, 
        Attributes atts) 
       throws SAXException { 
    // ... 
    throw new SAXException(new BreakParsingException()); 
} 
+5

Por cierto: 2 años después estoy empezando a Creo que es bastante desafortunado que tengamos que usar una excepción para controlar el flujo. Romper el proceso de análisis puede ser perfectamente válido en escenarios sin error ... Si alguna vez alguien encuentra una mejor solución, ¡me encantaría leerla! – chiccodoro

+1

Lanza una subclase de [SAXParseException] (http://www.saxproject.org/apidoc/org/xml/sax/SAXParseException.html) y obtendrás una devolución de llamada en [ErrorHandler] (http: // www. saxproject.org/apidoc/org/xml/sax/ErrorHandler.html). –

2

Tienes que lanzar un SAXException. Para distinguirlo de los errores comunes, lo subclase con mi propia clase Excepción

4

La solución simple sería usar el análisis StAX, en lugar de SAX. Mientras que SAX tiene análisis de inserción - los Parsers envían los eventos al Handler, StAX es un análisis de extracción, los eventos se nos brindan a través de XMLEventReader, que se puede usar de manera similar a un iterador. Por lo tanto, es más fácil implementar el salto condicional para salir del análisis sintáctico.

Cuestiones relacionadas