Hi,
it seems that xmlproc, the default Validating parser, in my setup does
not call back to setDocumentLoca tor. 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.sax2ext s
class BaseHandler(Con tentHandler):
def setDocumentLoca tor(self,locato r):
print "setDocumentLoc ator called"
self.d_locator= locator
def startElement(se lf, name, attr):
print "startEleme nt", name
open('e.dtd','w ').write('<!ELE MENT E EMPTY>')
open('e.xml','w ').write(
"""<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE E SYSTEM "e.dtd"><E/>""")
vp = xml.sax.sax2ext s.XMLValParserF actory.make_par ser()
print "vp type", vp.__class__
vph = BaseHandler()
vp.setContentHa ndler(vph)
vp.parse("e.xml ")
np = xml.sax.make_pa rser()
print "np type", np.__class__
nph = BaseHandler()
np.setContentHa ndler(nph)
np.parse("e.xml ")
OUTPUT:
vp type xml.sax.drivers 2.drv_xmlproc.X mlprocDriver
startElement E
np type xml.sax.expatre ader.ExpatParse r
setDocumentLoca tor called
startElement E