Pregunta

Entiendo la diferencia entre cómo funciona el analizador SAX frente al analizador XMLPull. De hecho, hay una explicación bastante buena aquí:

http://www.firstobject.com/xml-reader-sax-vs-xml-puller.htmEl artículo está un poco centrado en .NET, pero los conceptos se aplican.

Si bien estoy de acuerdo con la opinión del autor de que el analizador de extracción es más fácil de trabajar, estoy bastante confundido sobre qué tipo de analizador sería mejor en qué situaciones. Si alguien pudiera arrojar cualquier luz y señalarme una lectura más, lo agradecería.

Gracias.

¿Fue útil?

Solución

Encuentro que ambos apestan. (Y tengo una mejor solución para sugerir)

Deberías usar el Biblioteca XML basada en anotaciones simples. Me encanta y lo uso para todos mis proyectos. Si usted Leer el tutorial Entonces creo que encontrará que podrá hacer todo lo que desee y mucho más rápido y con menos código. (Por lo tanto, siendo menos propenso a los errores) La biblioteca usa los analizadores que estaba pidiendo para hacer el trabajo pesado.

Entonces puedes leer mi Publicación de blog sobre incluirlo en un proyecto de Android si tu quieres. (Funcionará en cada versión de Android desde al menos 1.5 UP, lo que significa básicamente para todos)

Otros consejos

Depende totalmente de la situación para, por ejemplo, si el archivo XML es realmente grande de lo que no puede optar por los analizadores de DOM, ya que primero traerá el archivo a la memoria y luego se analizará y descubrí que analizar un archivo de tamaño N Requiere 7n espacio de memoria. En este caso, debe optar por el analizador de saxo su luz y consumirá menos memoria.

El segundo caso es cuando el archivo no es realmente grande, en este caso puede optar por el analizador XML Pull porque en este tendrá un control total en el XML, puede omitir el ciclo de análisis en cualquier lugar donde no sea posible en SAX. Entonces, si la etiqueta que está buscando es la primera en el archivo, ¿por qué iría por un archivo completo?

Así que, por lo que sé, si considera solo la velocidad con el archivo pequeño, vaya con el analizador XML y si el archivo es grande y desea analizarlo todo, vaya con SAX.

Ambos analizadores son básicamente la misma memoria/tiempo en cuanto a tiempo. Lo único que es que con Pull Parser puede sacar los eventos como Startelement y Endelement y solo prestar atención a los que desea.

Donde, al igual que con los analizadores de Sax Android, no tiene otra opción, simplemente pone código donde desea, pero debe incluir todos los eventos.

aquí es un enlace al que puede referirse para obtener más lecturas.

Pull y Sax son similares en la forma en que ambos son enfoques de transmisión de bajo nivel que son más rápidos y más eficientes en la memoria que DOM, pero Pull tiene algunas ventajas sobre SAX:

Pull es más fácil de implementar que SAX porque no tiene que mantener el estado de su analizador (usando variables adicionales para poder saber en qué lugar su analizador actualmente está en el árbol XML). Los bucles anidados en su código Pull PaSer coincidirán con más o menos la jerarquía XML de su documento, por lo que creo que el código Pull PaSer también es más legible que el código de analizador SAX.

Con el código Pull Parser, puede omitir bloques completos que no desea analizar, por lo que también es más eficiente que SAX, lo que siempre extrae la información principal de todos los nodos. Usando un analizador de extracción, también puede detener el análisis en cualquier momento si obtuvo la información que desea, lo que no es posible con SAX.

Además, puede implementar un analizador saxo utilizando un análisis de extracción. Lo contrario no es posible.

Por todas estas razones, creo que el analizador de extracción es superior al saxo en todas las situaciones, sin embargo, al igual que el saxo, no es trivial implementarse correctamente y debe tener cuidado. Si no necesita los beneficios de velocidad de bajo nivel de Pull and Sax y su XML está limpio, siempre puede usar una biblioteca de análisis de nivel superior como Simple para hacer el trabajo duro por ti.

Encuentro que el modelo SAX es más fácil de trabajar en una situación específica: donde va a construir su propia representación en memoria de todo el documento (o al menos porciones principales) con estructuras de datos personalizadas. (Si no es particular sobre la estructura de datos, entonces el analizador DOM ya hace esto).

Encontré una salida mejor y más eficiente mientras usaba saxo en lugar de xmlpullparser ... mi escenario es analizar los atributos en una etiqueta XML, podría hacerlo fácilmente e insertarlo en la base de datos sin problemas ... Creo que depende de las situaciones, cuando Necesito escribir en un archivo XML, prefiero Dom Parser ...

public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        currentElement = true;
        db = new DatabaseHelper(thecontext);
        if (qName.equals("Asa.Amms.Data.Entity.User")) {
            int length = attributes.getLength();
            for (int i = 0; i < length; i++) {
                String name = attributes.getQName(i);
                if (name.equals("Id")) {
                    id = Integer.parseInt(attributes.getValue(i));
                }
                if (name.equals("Login")) {
                    LoginID = attributes.getValue(i).toString();
                }
                if (name.equals("Name")) {
                    Name = attributes.getValue(i).toString();
                }
                if (name.equals("Password")) {
                    Password = attributes.getValue(i).toString();
                }
                if (name.equals("ProgramOfficerId")) {
                    user_ProgramOfficerId = Integer.parseInt(attributes.getValue(i).toString());
                }
            }
            Log.i("Baal dhukbe", id + LoginID + Name + Password);

            db.insertUser(id, LoginID, Name, Password, user_ProgramOfficerId);
        }
}

Recomendaría usar el XMLPullParser One. El analizador de saxo no recuperó la etiqueta de una alimentación en mi prueba. XMLPullParser lo hizo fácilmente =) también depende de sus preferencias también

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top