xml aggregator
Gerard Flanagan
grflanagan at yahoo.co.uk
Sun Jul 9 10:55:54 EDT 2006
kepioo wrote:
> Hi all,
>
> I am trying to write an xml aggregator, but so far, i've been failing
> miserably.
>
> what i want to do :
>
> i have entries, in a list format :[[key1,value],[key2,value],[
> key3,value]], value]
>
> example :
> [["route","23"],["equip","jr2"],["time","3pm"]],"my first value"]
> [["route","23"],["equip","jr1"],["time","3pm"]],"my second value"]
> [["route","23"],["equip","jr2"],["time","3pm"]],"my third value"]
> [["route","24"],["equip","jr2"],["time","3pm"]],"my fourth value"]
> [["route","25"],["equip","jr2"],["time","3pm"]],'"my fifth value"]
>
[snip example data]
>
>
> If anyone has an idea of implemetation or any code ( i was trying with
> ElementTree...
>
(You should have posted the code you tried)
The code below might help (though you should test it more than I have).
The 'findall' function comes from here:
http://gflanagan.net/site/python/elementfilter/elementfilter.py
it's not the elementtree one.
Gerard
----------------------------------
X = [[[["route","23"],["equip","jr2"],["time","3pm"]],"my first
value"],
[[["route","23"],["equip","jr1"],["time","3pm"]],"my second value"],
[[["route","23"],["equip","jr2"],["time","3pm"]],"my third value"],
[[["route","24"],["equip","jr2"],["time","3pm"]],"my fourth value"],
[[["route","25"],["equip","jr2"],["time","3pm"]],"my fifth value"],
[[["route","25"],["equip","jr2"],["time","4pm"]],"my sixth value"]]
# reshape the data
records = []
for info, data in X:
record = []
for attr, val in info:
record.append(val)
record.append( data )
records.append( record )
for r in records:
print r
from elementtree.ElementTree import Element, SubElement, tostring
from elementfilter import findall
results = Element('results')
for r in records:
routeid, equipid, timeid, data = r
route, equip, time = None, None, None
existing_route = findall(results, "route[@id=='%s']" % routeid)
if existing_route:
route = existing_route[0]
existing_equip = findall(route, "equip[@id=='%s']" % equipid)
if existing_equip:
equip = existing_equip[0]
existing_time = findall(equip, "time[@id=='%s']" % timeid)
if existing_time:
time = existing_time[0]
route = route or SubElement(results, 'route', id=routeid)
equip = equip or SubElement(route, 'equip', id=equipid)
time = time or SubElement(equip, 'time', id=timeid)
data = SubElement(time,'data')
data.text = item
print tostring(results)
-------------------------------------------
More information about the Python-list
mailing list