2010-06-03 8 views
8

Dites-moi s'il vous plaît est-il possible de rompre le processus d'analyse? C'est à dire. quitter cette boucle n'atteignant pas la fin du document et l'événement correspondant "endDocument"?Java. Sax analyseur. Comment casser manuellement l'analyse?

+0

Même que cette question http://stackoverflow.com/questions/1345293/how-to-stop-parsing-xml-document-with-sax-at-any-time – Brian

Répondre

11

une exception dans Throw le gestionnaire et l'attraper dans le bloc de code où vous avez commencé l'analyse syntaxique:

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

Et dans votre DocumentHandler:

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

BTW: 2 ans plus tard, je commence à pense qu'il est assez regrettable que nous devions utiliser une exception pour contrôler le flux. Briser le processus d'analyse peut être parfaitement valable dans des scénarios sans erreur ... Si jamais quelqu'un trouve une meilleure solution, je serais heureux de le lire! – chiccodoro

+1

Lancez une sous-classe de [SAXParseException] (http://www.saxproject.org/apidoc/org/xml/sax/SAXParseException.html) et vous obtiendrez un rappel dans [ErrorHandler] (http: // www. saxproject.org/apidoc/org/xml/sax/ErrorHandler.html). –

2

Vous devez jeter un SAXException. Afin de le distinguer des erreurs normales je le sous-classerais avec ma propre classe d'exception

4

La solution simple serait d'utiliser l'analyse StAX - au lieu de SAX. Alors que SAX a une analyse poussée - les événements sont envoyés au gestionnaire par les analyseurs syntaxiques, StAX est l'analyse syntaxique, les événements nous sont transmis via XMLEventReader qui peut être utilisé comme un itérateur. Ainsi, il est plus facile de mettre en œuvre une rupture conditionnelle pour sortir de l'analyse syntaxique.