Python list to XML and vice versa

billiebeaver

New Member
I have some python code that I wrote to convert a python list into an XML element. It's meant for interacting with LabVIEW, hence the weird XML array format. Anyways, here's the code:\[code\]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 = http://stackoverflow.com/questions/11157853/sum(data, []) # pack the data for d in data: result.append(pack_simple(d)) # return the result return result\[/code\]Now I need to write an unpack() method to convert the packed XML Array back into a python list. I can extract the array dimensions and data just fine:\[code\]def unpack(element): # retrieve the array dimensions and data lengths = [] data = http://stackoverflow.com/questions/11157853/[] for entry in element: if entry.text =="Dimsize": lengths.append(int(entry.text)) else: data.append(unpack_simple(entry)) # now what?\[/code\]But I am not sure how to unflatten the array. What would be an efficient way to do that?Edit: Here's what the python list and corresponding XML looks like. Note: the arrays are n-dimensional.\[code\]data = http://stackoverflow.com/questions/11157853/[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]\[/code\]And then the XML version:\[code\]<Array> <Dimsize>2</Dimsize> <Dimsize>2</Dimsize> <Dimsize>2</Dimsize> <I32> <Name /> <Val>1</Val> </I32> ... 2, 3, 4, etc.</Array>\[/code\]The actual format isn't important though, I just don't know how to unflatten the list from:\[code\]data = http://stackoverflow.com/questions/11157853/[1, 2, 3, 4, 5, 6, 7, 8]\[/code\]back into:\[code\]data = http://stackoverflow.com/questions/11157853/[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]\[/code\]given:\[code\]lengths = [2, 2, 2]\[/code\]Assume pack_simple() and unpack_simple() do the same as pack() and unpack() for the basic data types (int, long, string, boolean).
 
Back
Top