[Pythonmac-SIG] XML handler design
steve at spvi.com
Thu Mar 24 15:10:04 CET 2005
>>> 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]?
handler = getattr(self, str('_start_'+name),None) # fetch the actual
if handler is not None:
handler( attrs )
or something like that? I'm not sure why you're using the
__class__.__dict__ attributes in the first place, so maybe what I
suggest can't work.
> 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.
I've not uesd the sax stuff myself.. but I'd say you can either save it
in the handler, as you're doing, or pass some kind structure/object to
the handler's constructor that it will use to save away the content it
>>> 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()
>>> 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.
> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
More information about the Pythonmac-SIG