Hay un sencillo módulo de serialización JSON con el nombre "simplejson" que serializa fácilmente objetos de Python a JSON.Serialize Python dictionary to XML
Estoy buscando un módulo similar que pueda serializar a XML.
Hay un sencillo módulo de serialización JSON con el nombre "simplejson" que serializa fácilmente objetos de Python a JSON.Serialize Python dictionary to XML
Estoy buscando un módulo similar que pueda serializar a XML.
Hay huTools.structured.dict2xml
que trata de ser compatible con simplejson
en espíritu. Puede darle pistas sobre cómo envolver las subestructuras anidadas. Compruebe la documentación para huTools.structured.dict2et
que devuelve ElementTree
Objetos en su lugar si las cadenas devueltas por dict2xml
.
>>> data = {"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7,
... "ort": u"Hücksenwagen",
... "positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},],
... "versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h",
... "anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"},
... ]}
>>> print ET.tostring(dict2et(data, 'kommiauftrag',
... listnames={'positionen': 'position', 'versandeinweisungen': 'versandeinweisung'}))
'''<kommiauftrag>
<anliefertermin>2009-11-25</anliefertermin>
<positionen>
<position>
<posnr>1</posnr>
<menge>12</menge>
<artnr>14640/XL</artnr>
</position>
</positionen>
<ort>Hücksenwagen</ort>
<versandeinweisungen>
<versandeinweisung>
<bezeichner>avisierung48h</bezeichner>
<anweisung>48h vor Anlieferung unter 0900-LOGISTIK avisieren</anweisung>
<guid>2103839-XalE</guid>
</versandeinweisung>
</versandeinweisungen>
<prioritaet>7</prioritaet>
<kommiauftragsnr>2103839</kommiauftragsnr>
</kommiauftrag>'''
huTools no es compatible con Python 3 (el objeto '' 'dict 'no tiene atributo' iteritems''''). – thomaskonrad
¿Cuáles son los términos de licencia de esta cosa? ¿Puedo usarlo en mi aplicación comercial? –
prueba este. único problema que no utilizan atributos (ya que no me gusta de ellos)
dict2xml on pynuggets.wordpress.com
dict2xml on activestate
from xml.dom.minidom import Document
import copy
class dict2xml(object):
doc = Document()
def __init__(self, structure):
if len(structure) == 1:
rootName = str(structure.keys()[0])
self.root = self.doc.createElement(rootName)
self.doc.appendChild(self.root)
self.build(self.root, structure[rootName])
def build(self, father, structure):
if type(structure) == dict:
for k in structure:
tag = self.doc.createElement(k)
father.appendChild(tag)
self.build(tag, structure[k])
elif type(structure) == list:
grandFather = father.parentNode
tagName = father.tagName
grandFather.removeChild(father)
for l in structure:
tag = self.doc.createElement(tagName)
self.build(tag, l)
grandFather.appendChild(tag)
else:
data = str(structure)
tag = self.doc.createTextNode(data)
father.appendChild(tag)
def display(self):
print self.doc.toprettyxml(indent=" ")
if __name__ == '__main__':
example = {'auftrag':{"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7,"ort": u"Huecksenwagen","positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},],"versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h","anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"},]}}
xml = dict2xml(example)
xml.display()
Aquí hay algún problema con la creación de otra instancia de dict2xml 'xml.dom.HierarchyRequestErr: dos elementos del documento no permitidos', , así que agregué el método de desvinculación: ' def unlink (self): self.doc.unlink() ' –
mayoría de los objetos en Python se representan como predice debajo:
>>> class Fred(object) :
... def __init__(self, n) : self.n = n
...
>>> a = Fred(100)
>>> print a.__dict__
{'n': 100}
Así que esto es similar a preguntando cómo convertir dicts a XML. Hay herramientas para convertir dict a/desde XML en:
Aquí está un ejemplo sencillo:
>>> import xmltools
>>> d = {'a':1, 'b':2.2, 'c':'three' }
>>> xx = xmltools.WriteToXMLString(d)
>>> print xx
<?xml version="1.0" encoding="UTF-8"?>
<top>
<a>1</a>
<b>2.2</b>
<c>three</c>
</top>
Hay una gran cantidad de documentación en el sitio web que muestra ejemplos:
Es difícil convertir "exactamente" entre dicts y XML: ¿Qué es un lista? ¿Qué haces con los atributos? ¿Cómo manejas las teclas numéricas? Muchos de estos problemas han sido abordados y se tratan en la documentación de herramientas XML (arriba).
¿Te importa la velocidad? ¿O la facilidad de uso es importante? Hay un módulo C++ puro (todo escrito en C++), un módulo puro de Python (todo escrito en Python) y un módulo de extensión Python C (escrito en C++, pero envuelto para que Python pueda llamarlo). El módulo de extensión C++ y Python C son órdenes de magnitud más rápidos, pero por supuesto requieren compilación para ponerse en marcha. El módulo de Python debería funcionar, pero es más lento:
Escribí una función simple que serializa diccionarios a xml (menos de 30 líneas).
de uso:
mydict = {
'name': 'The Andersson\'s',
'size': 4,
'children': {
'total-age': 62,
'child': [
{
'name': 'Tom',
'sex': 'male',
},
{
'name': 'Betty',
'sex': 'female',
}
]
},
}
print(dict2xml(mydict, 'family'))
Resultados:
<family name="The Andersson's" size="4">
<children total-age="62">
<child name="Tom" sex="male"/>
<child name="Betty" sex="female"/>
</children>
</family>
La fuente completo (incluyendo un ejemplo) se pueden encontrar en https://gist.github.com/reimund/5435343/
Nota: Esta función serializará entradas del diccionario como atributos en lugar de nodos de texto. Modificarlo para apoyar el texto sería muy fácil.
> http://code.activestate.com/recipes/415983/ Éste no se serializa a XML solo al formato Marshal. Y tampoco me gusta sys.exit en Exception. > http://sourceforge.net/projects/pyxser/ Éste no es BSD. Lo siento, olvidé mencionar, estoy buscando el módulo de Python o BSD, por lo que puedo distribuirlo con mi software BSD. Los últimos 2 - para servicios web, estoy buscando un serializador XML regular. – zinovii
zdmytriv: puede distribuir una biblioteca LGPL con su código BSD sin responsabilidades. – nosklo
@nosklo: No sabía que puedes hacer eso. Ahora lo sé, gracias. – zinovii