Pull and 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 eficiente de la memoria que DOM, pero tirón tiene algunas ventajas sobre SAX:
Tire es más fácil de implementar que SAX porque no tiene que mantener el estado de su analizador sintáctico (utilizando variables adicionales para poder saber en qué lugar está actualmente su analizador en el árbol XML). Los bucles anidados en el 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 de 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. Usando un analizador de extracción, también puede detener el análisis sintáctico en cualquier momento si buscó la información que quería, lo que no es posible con SAX.
Además, puede implementar un analizador SAX utilizando un analizador de extracción. Lo opuesto no es posible.
Por todas estas razones, creo que el analizador de extracción es superior a SAX en todas las situaciones, sin embargo, como SAX, no es trivial implementarlo correctamente y hay que tener cuidado. Si no necesita los beneficios de baja velocidad de extracción y SAX y su XML está limpio, siempre puede usar una biblioteca de análisis de nivel superior como Simple para hacer el trabajo por usted.
Gracias Robert! Lo leo y realmente me gusta. Guardaré mis comentarios en él después de jugar con él un poco más –
@Robert WTF Robert :-) ¡Su sitio parece estar fuera de control! – dbm
@dbm: lo siento mucho. Tuve que mover mi blog de un dominio a otro y todavía hay enlaces erróneos en el lugar y este fue uno de ellos. He editado esta publicación y he puesto el enlace al lugar donde se movió el blog. Gracias por alertarme y espero que la gente ahora disfrute de las nuevas publicaciones. (Estoy decepcionado porque se suponía que seguiría lanzando un redireccionamiento 301 al host anterior). –