Re: setDocumentLocator in validating parser (xmlproc)

2005-03-19 Thread Cees Wesseling
"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)

2005-03-18 Thread James Kew
"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)

2005-03-18 Thread Cees Wesseling
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