¿Alguien sabe cómo obtendría una instancia DOM (árbol) de un archivo XML en Python. Estoy tratando de comparar dos documentos XML entre sí que pueden tener elementos y atributos en diferente orden. ¿Cómo haría esto?Obteniendo el árbol DOM del documento XML
Respuesta
Personalmente, siempre que sea posible, comenzaría con elementtree (preferiblemente la implementación C que viene con la biblioteca estándar de Python, o la implementación lxml, pero eso es esencialmente solo una cuestión de mayor velocidad). No es un DOM que cumple con los estándares, pero contiene la misma información de una manera más pitónica y más práctica. Puede comenzar llamando al xml.etree.ElementTree.parse
, que toma el origen XML y devuelve un elemento-árbol; haga eso en ambas fuentes, use getroot
en cada árbol de elementos para obtener su elemento raíz, luego compare recursivamente los elementos comenzando desde los de raíz.
Los elementos secundarios de un elemento forman una secuencia, en el árbol de elementos como en el DOM estándar, lo que significa que su orden se considera importante; pero es fácil hacer que Python los establezca (o con un poco más de esfuerzo "conjuntos múltiples" de algún tipo, si las repeticiones son importantes en su caso de uso, aunque el orden no lo es) para una comparación más flexible. Es aún más fácil para los atributos de un elemento dado, donde la exclusividad está asegurada y el orden semánticamente no es relevante.
¿Hay alguna razón específica por la que necesita un DOM estándar en lugar de un contenedor alternativo como un árbol de elementos, o simplemente usa el término DOM en un sentido general para que el árbol de elementos esté bien?
En el pasado también obtuve buenos resultados usando PyRXP, que usa una representación más uniforme y más clara que ElementTree. Sin embargo, ERA años y años atrás; No tengo experiencia reciente sobre cómo PyRXP hoy se compara con lxml o cElementTree.
Para comparar instancias de documentos XML, una ingenua comparación de los árboles DOM analizados no va a funcionar. Es probable que necesita para implementar su propia NodeComperator que compara de forma recursiva un nodo y sus niños-nodos con algún otro nodo y sus niños-nodos en función de sus criterios específicos, tales como:
- Cuando es el orden de los elementos secundarios significativos ?
- ¿Cuándo es significativo el espacio en blanco en el contenido de texto?
- ¿Hay valores predeterminados para algunos elementos y son aplicados por su analizador?
- Deberían referencias a entidades ampliarse para la comparación
Minidom es un buen punto de partida para analizar los archivos y es fácil de usar. Sin embargo, la implementación real de la función de comparación para su aplicación específica debe ser realizada por usted.
- 1. xpath con el documento dom
- 2. Lectura de archivos HTML en el árbol DOM utilizando Java
- 3. Objective-C DOM analizador XML para iPhone
- 4. Obteniendo el texto del nodo en PHP DOM
- 5. jQuery x y coordenadas del documento del objeto DOM
- 6. ¿Cómo usar el documento DOM de php?
- 7. Iterar todas las generaciones de nodos XML en DOM DOM
- 8. XML IDREF ¿otro documento XML?
- 9. ¿Cómo guardar el documento DOM analizado y modificado en el archivo xml?
- 10. Simplifique el análisis PHP DOM XML - ¿cómo?
- 11. quitar declaración XML del documento XML generado usando java
- 12. Obtiene el nodo raíz del documento XML usando simplexml
- 13. PHP XML DOM no detectada excepción 'DOMException' con el mensaje 'incorrecto documento de error'
- 14. Recorriendo el árbol DOM para mostrar información sobre el parentNode
- 15. Obteniendo el documento como nulo [#document: null] Después de analizar XML en Java usando DocumentBuilder
- 16. Error en el documento XML (2,2)
- 17. Linq a XML vs DOM
- 18. Biblioteca Node.js que implementa W3C XML DOM?
- 19. Deserializar matriz XML en el documento raíz
- 20. error Deserialización en el documento XML (1,1)
- 21. ¿XPathDocument carga todo el documento xml?
- 22. ¿Cómo mantengo el árbol "Elementos" (DOM) abierto en Webkit Inspector?
- 23. XML: para adjuntar documento xml en el nodo de otro documento
- 24. Cómo convertir String a DOM ¿Objeto de documento en Java?
- 25. Orden de los atributos XML después del procesamiento DOM
- 26. Java MongoDB obteniendo valor para el documento secundario
- 27. ¿Cómo dominar el modelo de objetos de documento (DOM)?
- 28. Número ideal de identificadores en documento dom o html
- 29. Crear documento XML utilizando nodeList
- 30. ¿Cómo seleccionar valores distintos del documento XML usando XPATH?
He visto minidom y no hay ninguna información en la documentación sobre cómo obtener un árbol DOM a partir de un archivo analizado. Me gustaría comparar dos árboles para que el orden no importe. ¿Tienes alguna idea de cómo hacer esto? – Dave
La documentación de minidom en Python 2.6 da un ejemplo de cómo obtener un DOM de un archivo (¿está buscando algo más? desde xml.dom.minidom, análisis de importación, parseString dom1 = parse ('c: \\ temp \\ mydata.xml') # analizar un archivo XML por nombre – Mark