street.swee...@mailworks.org Wrote in message: > I'm trying to sort the order of elements in an xml file, mostly > to make visual inspection/comparison easier. The example xml and > code on http://effbot.org/zone/element-sort.htm get me almost > what I need, but the xml I'm working with has the element I'm > trying to sort on one level deeper. > > > That page's example xml: > > <phonebook> > <entries> > <entry> > <name>Ned</name> > <number>555-8904</number> > </entry> > <entry> > <name>John</name> > <number>555-5782</number> > </entry> > <entry> > <name>Julius</name> > <number>555-3642</number> > </entry> > </entries> > </phonebook> > > > And that page's last example of code: > > import xml.etree.ElementTree as ET > tree = ET.parse("data.xml") > def getkey(elem): > return elem.findtext("number") > container = tree.find("entries") > container[:] = sorted(container,key=getkey)
That would be more clearly written sort(container,key=getkey) > tree.write("new-data.xml") > > ...... > Traceback (most recent call last): > File "./xmlSort.py", line 16, in <module> > container[:] = sorted(container, key=getkey) > TypeError: 'NoneType' object is not iterable > That simply tells you that tree.find () returns None. > > "container[:] = sorted(container, key=getkey)" confuses me, > particularly because I don't see how the elem parameter is passed > to the getkey function. > You should play with a list, sorting it with a key function. For example make a list of strings, using a key= def mykey (elem): return elem.lower () To see what's going on, add a print to that function, showing yourself that the sort function will call mykey () on each element. I can't help with the xml stuff, but it seems clear you have to produce a find call that gives you the right list. -- DaveA _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor