python - example - Análisis de XML: Árbol de elementos(etree) vs. minidom
python xml example (2)
Las interfaces DOM y Sax para el análisis de XML son las formas clásicas de trabajar con XML. Python tuvo que proporcionar esas interfaces porque son bien conocidas y estándar.
El paquete ElementTree estaba destinado a proporcionar una interfaz más Pythonic. Se trata de hacer las cosas más fáciles para el programador.
Dependiendo de su compilación, cada uno de ellos tiene una implementación de C subyacente que los hace correr más rápido.
Ninguna de las herramientas anteriores está en desuso. Cada uno tiene sus méritos (por ejemplo, Sax no necesita leer toda la información en la memoria).
También hay un módulo de terceros llamado lxml que también es una opción popular (con todas las funciones y rápido).
Esta pregunta ya tiene una respuesta aquí:
- Análisis de XML: respuestas de ElementTree vs SAX y DOM 4
He estado usando minidom para analizar XML durante años. Ahora de repente he aprendido sobre el árbol de elementos. Mi pregunta ¿Cuál es mejor para analizar? Es decir:
- ¿Cual es mas rápido?
- ¿Cuál usa menos memoria?
- ¿Alguna de las dos dependencias O (n ^ 2) debería preocuparme?
- ¿Se está depreciando uno a favor de otro?
¿Por qué tenemos dos interfaces?
Gracias.
Python tiene dos interfaces probablemente porque Element Tree se integró en la biblioteca estándar mucho después de que surgiera el minidom. La razón de esto fue probablemente su API mucho más "Pythonic" en comparación con el DOM controlado por el W3C.
Si le preocupa la velocidad, también hay lxml , que construye un DOM compatible con ElementTree usando libxml2 y debería ser bastante rápido: tienen una suite de referencia comparándose con las implementaciones de Python y C de ElementTree.
Si le preocupa el uso de la memoria, no debería utilizar una API de árbol de todos modos; PullDOM podría ser una mejor opción, pero estoy extrapolando la experiencia con el excelente analizador de extracción de Java: no parece haber mucha información actualizada sobre PullDOM.