Lista de Python a XML y viceversa.
Tengo un código python que escribí para convertir una lista de python en un elemento XML. Está pensado para interactuar con LabVIEW, de ahí el extraño formato de matriz XML. De todos modos, aquí está el código:
def pack(data):
# create the result element
result = xml.Element("Array")
# report the dimensions
ref = data
while isinstance(ref, list):
xml.SubElement(result, "Dimsize").text = str(len(ref))
ref = ref[0]
# flatten the data
while isinstance(data[0], list):
data = sum(data, [])
# pack the data
for d in data:
result.append(pack_simple(d))
# return the result
return result
Ahora necesito escribir un método unpack () para volver a convertir la matriz XML empaquetada en una lista de python. Puedo extraer las dimensiones de la matriz y los datos muy bien:
def unpack(element):
# retrieve the array dimensions and data
lengths = []
data = []
for entry in element:
if entry.text == "Dimsize":
lengths.append(int(entry.text))
else:
data.append(unpack_simple(entry))
# now what?
Pero no estoy seguro de cómo deshacer la matriz. ¿Cuál sería una forma eficiente de hacer eso?
Edición: Así es como se ve la lista de python y el XML correspondiente. Nota: las matrices son n-dimensionales.
data = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
Y luego la versión XML:
<Array>
<Dimsize>2</Dimsize>
<Dimsize>2</Dimsize>
<Dimsize>2</Dimsize>
<I32>
<Name />
<Val>1</Val>
</I32>
... 2, 3, 4, etc.
</Array>
Sin embargo, el formato real no es importante, simplemente no sé cómo deshacer la lista de:
data = [1, 2, 3, 4, 5, 6, 7, 8]
de vuelta en:
data = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
dado:
lengths = [2, 2, 2]
Suponga que pack_simple () y unpack_simple () hacen lo mismo que pack () y unpack () para los tipos de datos básicos (int, long, string, boolean).