valor - módulo para crear una representación de objeto python desde xml
modulo shelve python (7)
Estoy buscando un módulo nativo de python fácil de manejar para crear una representación de objeto python a partir de xml.
Encontré varios módulos a través de google (uno de ellos es XMLObject ) pero no quería probarlos todos.
¿Cuál crees que es la mejor manera de hacer tales cosas?
EDITAR: Me olvidé de mencionar que el XML que me gustaría leer no es generado por mí. Es un archivo XML existente en una estructura de la que no tengo control.
Apoyo la sugerencia de xml.etree.ElementTree, sobre todo porque ahora está en stdlib. También hay una implementación más rápida, xml.etree.cElementTree disponible también.
Si realmente necesita rendimiento, sugeriría lxml
http://www.ibm.com/developerworks//xml/library/x-hiperfparse/
He escuchado que el más fácil es ElementTree , aunque rara vez trabajo con XML y no puedo decir nada por experiencia.
Uso (y me gusta) PyRXP, que crea una tupla construida a partir del documento XML.
El problema principal con una estructura de objeto XML -> python es que no hay ningún análogo de Python para una lista atribuida, es decir, una lista con elementos, que también tiene atributos. Si lo desea, es una lista y un diccionario al mismo tiempo.
Analizo el resultado de PyRXP y creo la lista / diccionario según la estructura; el XML con el que trato es de lista o de atributo, nunca de ambos. (Estoy consumiendo datos de una fuente conocida).
También está el excelente pyxser de biblioteca de terceros para Python.
pyxser significa Servidor de XML de Python y es un objeto de Python para el serializador y el deserializador de XML. En otras palabras, puede convertir un objeto de Python en XML y también, convertir ese XML de nuevo en el objeto de Python original.
He tenido bastante suerte con la función xml2obj de Wai Yip Tung disponible aquí:
http://code.activestate.com/recipes/534109-xml-to-python-data-structure/
Son ~ 84 líneas de código. Es una pitón nativa y pura; utilizando bibliotecas xml.sax y re (expresión regular). Usted simplemente le pasa XML y recupera su objeto.
Usted dice que quiere una representación de objeto , lo que interpretaría que significa que los nodos se convierten en objetos, y los atributos e hijos del nodo se representan como atributos del objeto (posiblemente de acuerdo con algún Esquema). Esto es lo que hace XMLObject, creo.
Hay algunos paquetes que conozco. 4Suite incluye algunas herramientas para hacer esto, y creo que Amara implementa específicamente esto (construido sobre 4Suite). También puede usar lxml.objectify , que fue inspirado por Amara y gnosis.xml.objectify .
Por supuesto, una tercera opción es, dada una representación concreta del XML (usando ElementTree o lxml), puede construir su propio modelo personalizado alrededor de eso. lxml.html es un ejemplo de eso, extendiendo la interfaz base de lxml con alguna funcionalidad específica de HTML.
Python tiene módulos pickle y cPickle para la serialización de objetos de Python. Ambos módulos proporcionan funcionalidad para serializar / deserializar la jerarquía de objetos de Python para convertir a / desde una secuencia de bytes:
A continuación, se proporciona una interfaz similar: pickle (), unpickle () para la serialización a / desde XML