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