[Pythonmac-SIG] XML handler design
Henning.Ramm at mediapro-gmbh.de
Henning.Ramm at mediapro-gmbh.de
Thu Mar 24 12:10:54 CET 2005
Hi there!
I just wrote a SAX handler for XML files that describe a newspaper issue (list of pages etc.); I'd like to know if I could do it better.
def startElement(self, name, attrs):
"""call an own handler method named _start_Something
for a Something element if it exists,
to avoid a long list of 'if name== ...'"""
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 this?
The different element handlers fill an array of custom Page objects (self.pages).
One gets this array either directly as MyHandler.pages or via
def getPages(self):
return self.pages.getSortedArray() # no, it's not a plain array ;-)
def getPage(self, no):
return self.pages[no]
Is that the right way to get data from a handler? Like in:
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 guess it would be better (more logical) to get the data from the parser?
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