Parsing XML using SAX
Fredrik Lundh
fredrik at pythonware.com
Mon Oct 23 10:58:22 EDT 2006
Nathan Harmston wrote:
> However it is quite messy at the moment. The main reason is that Python
> doesnt have a switch statement.
a switch statement wouldn't save you a single line, so I find it a bit hard
to believe that it's the main reason...
> def startElement(self,name,attributes):
> if name == "sbml":
> s = Sbml(attributes['xmlns'], attributes['version'],
> attributes['level'])
> self.sbmlDict['sbml'] = s
> elif name == "model":
> m = Model(attributes['id'], attributes['name'])
> self.sbmlDict['model'] = m
> elif name == "listOfCompartments":
> self.inListOfCompartments = bool(1)
> elif name == "compartment" and self.inListOfCompartments:
> c = Compartment(attributes['id'],
> attributes['name'])
> self.tempList.append(c)
> .......................................snip
>
> I would use a dictionary for this, but this would require the use of many
> extra methods for each tag name, and this would lead to clutter aswell. Does
> anyone have any suggestions for reducing the number of lines and making my
> code look neater than a large amount of methods or elif statements.
forget about SAX and silly state machines, and use a modern XML library;
here's some ElementTree inspiration:
http://effbot.org/zone/element-iterparse.htm#incremental-decoding
there are several other newer libraries that provide built-in data binding support,
including lxml.objectify and Amara.
</F>
More information about the Python-list
mailing list