android xml saxparser xmlpullparser

android - SAX parser vs XMLPull parser



saxparser xmlpullparser (7)

Ambos analizadores son básicamente la misma memoria / tiempo. Lo único es que con el parser de extracción puede extraer los eventos como el elemento inicial y el elemento final y solo prestar atención a los que desee.

donde, al igual que con los analizadores de saxo android, no tienes otra opción, solo pones el código donde quieras, pero debes incluir todos los eventos.

here hay un enlace que puede consultar para leer más.

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-pull-parser.htm El artículo está un poco centrado en .NET pero se aplican los conceptos.

Aunque estoy de acuerdo con la opinión del autor de que es más fácil trabajar con el analizador Pull, estoy bastante confundido en cuanto a qué tipo de analizador sería mejor en qué situaciones. Si alguien pudiera arrojar alguna luz y señalarme algo más de lectura, lo apreciaría.

Gracias.


Considero que es más fácil trabajar con el modelo SAX en una situación específica: donde va a construir su propia representación en memoria de todo el documento (o al menos en partes importantes) con estructuras de datos personalizadas. (Si no te interesa la estructura de datos, el analizador DOM ya lo hace).


Depende totalmente de la situación, por ejemplo, si el archivo xml es realmente grande, no puede optar por los analizadores DOM, ya que primero lo llevarán 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 SAX parser 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 de extracción XML porque en este tendrá control total sobre el xml, puede omitir el ciclo de análisis en cualquier lugar que no sea posible en SAX. Entonces, si la etiqueta que está buscando es la primera en el archivo, entonces ¿por qué iría por todo el archivo?

Por lo que sé, si se considera solo la velocidad con un archivo pequeño, vaya con el analizador de extracción XML y si el archivo es grande y desea analizarlo todo, vaya con SAX.


Encontré una salida mejor y más eficiente al usar SAX en lugar de XMLPullParser ... Mi escenario es analizar los atributos bajo 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); } }


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

Debe utilizar la biblioteca XML basada en anotaciones simples . Me encanta y lo uso para todos mis proyectos. Si lees el tutorial , creo que encontrarás que podrá hacer todo lo que quieras, mucho más rápido y con menos código. (Por lo tanto, es menos propenso a errores) Internamente, la biblioteca utiliza los analizadores que estaba preguntando para realizar el trabajo pesado.

A continuación, puede leer la publicación de mi blog e incluirla en un proyecto de Android si lo desea. (Funcionará en todas las versiones de Android a partir de al menos 1.5, lo que significa básicamente para todos)


Pull y Sax son similares en la forma en que son enfoques de transmisión de bajo nivel que son más rápidos y más eficientes en 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 saber en qué lugar está actualmente su analizador en el árbol XML). Los bucles anidados en su código del analizador de extracción coincidirán más o menos con la jerarquía XML de su documento, por lo que creo que el código del analizador de extracción también es más legible que el código del analizador SAX.

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

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

Por todas estas razones, creo que el parser de extracción es superior a SAX en todas las situaciones, sin embargo, como SAX no es trivial de implementar adecuadamente y hay que tener cuidado. Si no necesita los beneficios de velocidad de bajo nivel de pull y 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 usted.


recomendaría usar el XmlPullParser uno ... el analizador de Sax no recuperó la etiqueta de un feed en mi prueba ... xmlpullparser lo hizo fácilmente =) también depende de sus preferencias también