¿Cómo detener el análisis de documentos XML con SAX en cualquier momento?

Analizo un gran documento xml con Sax, ¿quiero dejar de analizar el documento cuando se establece alguna condición? ¿Cómo hacer?

Cree una especialización de una SAXException y tírela (no tiene que crear su propia especialización, pero significa que puede atraparla usted mismo específicamente y tratar otras SAXExceptions como errores reales).

public class MySAXTerminatorException extends SAXException { ... } public void startElement (String namespaceUri, String localName, String qualifiedName, Attributes attributes) throws SAXException { if (someConditionOrOther) { throw new MySAXTerminatorException(); } ... } 

No conozco un mecanismo para abortar el análisis SAX que no sea la técnica de lanzamiento de excepción descrita por Tom . Una alternativa es cambiar al uso del analizador StAX (ver pull vs. push ).

Utilizo una variable booleana ” stopParse ” para consumir los oyentes ya que no me gusta usar throw new SAXException() ;

 private boolean stopParse; article.getChild("title").setEndTextElementListener(new EndTextElementListener(){ public void end(String body) { if(stopParse) { return; //if stopParse is true consume the listener. } setTitle(body); } }); 

Actualizar:

@PanuHaaramo, suponiendo tener este .xml

  
Jorgesys
Android
Java

el analizador para obtener el valor de “título” con android SAX debe ser:

  import android.sax.Element; import android.sax.EndTextElementListener; import android.sax.RootElement; ... ... ... RootElement root = new RootElement("root"); Element article= root.getChild("article"); article.getChild("title").setEndTextElementListener(new EndTextElementListener(){ public void end(String body) { if(stopParse) { return; //if stopParse is true consume the listener. } setTitle(body); } });