Pregunta

Estoy analizar un muy simple esquema XML con un analizador SAX en Android.

Un archivo de ejemplo sería

<Lists>
<List name="foo">
<Note title="note 1" .../>
<Note title="note 2" .../>
</List>
<List name="bar">
<Note title="note 3" .../>
</List>
</Lists>

El ... representa más datos de notas como atributos que no son importantes a la pregunta.

Yo uso un analizador SAX para analizar el documento y sólo implementar el startElement y métodos 'endElement' del HandlerBase para manejar Note y nodos de lista.

Sin embargo, en algunos casos los archivos puede ser muy grande y tomar algún tiempo para procesar. Me gustaría ser capaz de abortar el proceso de análisis en cualquier momento (es decir, el usuario pulsa el botón Cancelar).

La mejor manera que he llegado con es lanzar una excepción a mi método startElement cuando se cumplen ciertas condiciones (es decir boolean stopParsing es cierto).

Hay una mejor manera de hacer esto?

Siempre he utilizado analizadores de estilo DOM, por lo que no entiendo completamente el analizador SAX.

Una nota final, me estoy quedando esta en Android, así que voy a tener el analizador se ejecuta en un subproceso de trabajo para mantener la interfaz de usuario sensible. Si usted sabe cómo puedo matar el hilo de forma segura mientras el analizador está funcionando eso responde a mi pregunta también.

¿Fue útil?

Solución

Es posible que desee ver en XMLPullParser ya que esto podría llevarse a cabo fácilmente con sólo no llamar al método siguiente. Usted está en un mayor control sobre el análisis.

XmlPullParser xpp=getResources().getXml(R.xml.lists);
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
    if (xpp.getEventType()==XmlPullParser.START_TAG) {
        if (xpp.getName().equals("list")) {
            items.add(xpp.getAttributeValue(0));
        }
    }

    xpp.next();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top