[Pythonmac-SIG] XML handler design

Henning.Ramm at mediapro-gmbh.de Henning.Ramm at mediapro-gmbh.de
Thu Mar 24 14:35:33 CET 2005

David Reed wrote:

>There's probably a better mailing list with XML parsing experts. I'm 
>certainly not an expert but have done a little XML parsing. 
>I've always 
>followed the pattern of using startElement, characters and endElement 
>to grab all the data. In the startElement method you set a instance 
>variable to keep track of the current tag you are processing. You use 
>the characters method to build up the values and then in the 
>method you store the data in your data structure. See the pyxml HOWTO 
>for an example - specifically this section:

Yes, sure. Thanks, but
that's not what I wanted to know. 
Perhaps I wasn't clear enough.
It's not really so much XML related...

>> def startElement(self, name, attrs):
>>     self._queue.append(name) # keep the order of processed tags
>>     handler = str('_start_'+name)
>>     if hasattr(self, handler):
>>         self.__class__.__dict__[handler](self, attrs)

Is there a better syntax for self.__class__.__dict__[handler]?

And where should the "output" go to?
All examples use print statements in the element handlers.
I wrote those get... methods - but I guess they don't belong in the XML handler, but perhaps in the parser or somewhere else.
It works, but I don't think it's good design.

>> def getPages(self):
>>     return self.pages.getSortedArray()
>> def getPage(self, no):
>>     return self.pages[no]

>> parser = xml.sax.make_parser()
>> parser.setFeature(xml.sax.handler.feature_namespaces, 0)
>> pxh = MyHandler()
>> parser.setContentHandler(pxh)
>> parser.parse(dateiname)
>> for p in pxh.getPages(): ...

I should ask the last question on the twisted ML, I guess:

>> Further, if I'd like to use it in a twisted driven asynchronous app, 
>> would I let the parser run in a thread? (Or how can I make 
>> the parser non-blocking?)

Best regards,
Henning Hraban Ramm
Südkurier Medienhaus / MediaPro
Support/Admin/Development Dept.

More information about the Pythonmac-SIG mailing list