Re: setDocumentLocator in validating parser (xmlproc)
"James Kew" <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>... Thanks James, a perfect patch that works perfect for me. On a side note, it seems the locator is not standarized. expat gives positions at the "<"-char of startElement while xmlproc (PyXml) gives it the ">"-char of startElement.And both one columnNumber off. A bit annoying when swapping parsers. Cees -- http://mail.python.org/mailman/listinfo/python-list
Re: setDocumentLocator in validating parser (xmlproc)
"Cees Wesseling" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > it seems that xmlproc, the default Validating parser, in my setup does > not call back to setDocumentLocator. Is there anyway to get a locator > in my handler? It's a known bug with a simple patch -- I don't know why it wasn't fixed in PyXML 0.8.4. http://sourceforge.net/tracker/?func=detail&aid=835638&group_id=6473&atid=106473 I had the same problem a while ago; I ended up doing a monkeypatch to xml.sax.drivers2.drv_xmlproc to add the missing call: import xml.sax.drivers2.drv_xmlproc # Override the set_locator method. def set_locator(self, locator): # Existing code. self._locator = locator # ...but also call the ContentHandler. # drv_xmlproc already implements the Locator interface. self._cont_handler.setDocumentLocator(self) setattr(xml.sax.drivers2.drv_xmlproc.XmlprocDriver, "set_locator", set_locator) HTH, James Kew http://jameskew.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list
setDocumentLocator in validating parser (xmlproc)
Hi, it seems that xmlproc, the default Validating parser, in my setup does not call back to setDocumentLocator. Is there anyway to get a locator in my handler? Below you find an example and its output. Regards, Cees # base imports from xml.sax.handler import ContentHandler from xml.sax.handler import EntityResolver import xml.sax import xml.sax.sax2exts class BaseHandler(ContentHandler): def setDocumentLocator(self,locator): print "setDocumentLocator called" self.d_locator=locator def startElement(self, name, attr): print "startElement", name open('e.dtd','w').write('') open('e.xml','w').write( """ """) vp = xml.sax.sax2exts.XMLValParserFactory.make_parser() print "vp type", vp.__class__ vph = BaseHandler() vp.setContentHandler(vph) vp.parse("e.xml") np = xml.sax.make_parser() print "np type", np.__class__ nph = BaseHandler() np.setContentHandler(nph) np.parse("e.xml") OUTPUT: vp type xml.sax.drivers2.drv_xmlproc.XmlprocDriver startElement E np type xml.sax.expatreader.ExpatParser setDocumentLocator called startElement E -- http://mail.python.org/mailman/listinfo/python-list