Come smettere di parsing di un documento xml con SAX in qualsiasi momento?

Mi sono parse un grande documento xml con Sax, voglio interrompere l’analisi del documento quando si verifica una condizione di stabilire? Come fare?

InformationsquelleAutor Diablo.Wu | 2009-08-28

 

3 Replies
  1. 39

    Creare una specializzazione di una SAXException e buttare (non è necessario creare una propria specializzazione, ma significa che si può specificamente prendere voi stessi e il trattamento di altri SAXExceptions come errori effettivi).

    public class MySAXTerminatorException extends SAXException {
        ...
    }
    
    public void startElement (String namespaceUri, String localName,
                               String qualifiedName, Attributes attributes)
                            throws SAXException {
        if (someConditionOrOther) {
            throw new MySAXTerminatorException();
        }
        ...
    }
    • C’è qualche altro modo? non utilizzare eccezione.
    • Perché non si vuole? Che è quello che le eccezioni sono progettati per.
    • fwiw, che non è quello che le eccezioni sono progettati per. La terminazione di un analisi di questo tipo non è una condizione di errore. È tuttavia l’unico modo per fare questo afaict 🙁
    • In realtà, dovrebbe essere SAXParseException in modo che si può compilare un Localizzatore, e ottenere un callback sul ErrorHandler (che è il posto giusto per ‘ripulire’).
    • Qui è un buon esempio – Interrompere un parser SAX quando si hanno abbastanza dati
  2. 2

    Io uso una variabile booleana “stopParse” per consumare la ascoltatori in quanto non mi piace per uso 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);
                }
            });

    Aggiornamento:

    @PanuHaaramo, supossing per questo .xml

    <root>
            <article>
                   <title>Jorgesys</title>
            </article>
            <article>
                   <title>Android</title>
            </article>
            <article>
                   <title>Java</title>
            </article>
    </root>

    il parser per ottenere il “titolo” value utilizzando android SAX deve essere:

       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);
                    }
                });
    • Questo è per Android? Posso solo trovare android.sax.EndTextElementListener. Anche ciò che è article qui?
    • ho aggiornato la mia risposta!!!
    • Grazie. Io non sono in via di sviluppo per Android, ma chiarisce così! Credo che questo non è fattibile in Java regolare (che sto usando).

Lascia un commento