2008-11-20 18 views
8

Estoy buscando un módulo nativo de python fácil de manejar para crear una representación de objeto python a partir de xml.módulo para crear una representación de objeto python desde 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?

EDIT: 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.

+0

¿Estás buscando serializar un objeto? o es XML un requisito difícil? –

+0

Necesito leer archivos XML existentes, por lo que XML es un requisito difícil – Martin

Respuesta

12

usted dice que quiere un objeto representación, que me gustaría interpretar en el sentido de 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.

+0

De acuerdo con su interpretación. –

+0

¿4Suite y lxml están escritos en python? No quería instalar binarios para resolver un problema tan trivial. – Martin

3

He oído que la más fácil es ElementTree, aunque raramente trabajo con XML y no puedo decir nada por experiencia.

1

Python tiene pepinillo y módulos cPickle para Python serialización de objetos. Ambos de estos módulos proporcionan funcionalidad para serializar/deserializar jerarquía de objetos Python para convertir a/de un flujo de bytes:

A continuación se proporciona interfaz similar: salmuera(), unpickle() para la serialización a/desde XML

+0

Lo siento ... 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. – Martin

1

I use (y me gusta) PyRXP, que crea una tupla construida a partir del documento XML.

El problema principal con una estructura de objeto XML -> python directa es que no hay un 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 dependiendo de la estructura; el XML con el que trato es de lista o basado en atributos, nunca ambos. (Estoy consumiendo datos de una fuente conocida).

+0

PyRXP no es un módulo nativo de Python, ¿o no? – Martin

+1

No, es un módulo de terceros, posiblemente escrito en C. Me he perdido esa parte de la pregunta. –

3

También existe la excelente biblioteca de terceros pyxser para Python.

pyxser significa Python XML serialización y es un objeto de Python a serializador XML y deserializer. En es decir, puede convertir un objeto Python en XML y también, convertir ese XML en el objeto original Python .

Cuestiones relacionadas