[XML-SIG] PubIdResolver

Marco Machmer marco@morca.de
Thu, 28 Nov 2002 09:38:58 +0100


On Friday, 1. November 2002 22:20, Martin v. Loewis wrote:
> Marco Machmer <marco@morca.de> writes:
> > i want set my own PubIdResolver for an xml-parser created with
> > sax2exts.XMLValParserFactory.make_parser()
> > has anybody a tip for me, how can i do this?
>
> You should invoke setEntityResolver, passing an object that implements
> the EntityResolver interface (see handler.EntityResolver).
>
> HTH,
> Martin



it doesn't work for me. here is my example code:
#
#
#
import sys
from xml.sax import sax2exts
from xml.dom.ext.reader import Sax2
from xml.sax.handler import EntityResolver
from xml.dom.ext import PrettyPrint

class MMEntityResolver(EntityResolver):
    def resolveEntity(self, publicId, systemId):
        """Resolve the system identifier of an entity and return either
        the system identifier to read from as a string, or an InputSource
        to read from."""
        print "MMEntityResolver: ich bin da"
        print "publicId: " + str(publicId)
        print "systemId: " + str(systemId)
        if str(publicId) == "-//marco/gg//DE":
            return open("test.dtd", 'r')
        return systemId

myparser = sax2exts.XMLValParserFactory.make_parser()
er = MMEntityResolver()
myparser.setEntityResolver(er)
xreader = Sax2.Reader(parser=myparser)

xf = open(sys.argv[1], 'r')
myDom = xreader.fromStream(xf)
xf.close()

PrettyPrint(myDom)

##########

i get the following exception:

  File "dom2.py", line 28, in ?
    myDom = xreader.fromStream(xf)
  File "/usr/lib/python2.1/site-packages/_xmlplus/dom/ext/reader/Sax2.py", line 373, in fromStream
    self.parser.parse(s)
  File "/usr/lib/python2.1/site-packages/_xmlplus/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.1/site-packages/_xmlplus/sax/drivers2/drv_xmlproc.py", line 93, in feed
    self._parser.feed(data)
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlval.py", line 44, in feed
    self.parser.feed(data)
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py", line 332, in feed
    self.do_parse()
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlproc.py", line 101, in do_parse
    self.parse_doctype()
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlproc.py", line 509, in parse_doctype
    sys_id))
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py", line 125, in parse_resource
    self.report_error(3000, sysID)
  File "/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py", line 524, in report_error
    self.err.fatal(msg)
  File "/usr/lib/python2.1/site-packages/_xmlplus/sax/drivers2/drv_xmlproc.py", line 226, in fatal
    self._err_handler.fatalError(saxlib.SAXParseException(msg, None, self))
  File "/usr/lib/python2.1/site-packages/_xmlplus/dom/ext/reader/Sax2.py", line 341, in fatalError
    raise exception
xml.sax._exceptions.SAXParseException: d1.xml:2:57: Couldn't open resource 'xtest.dtd'


#####

and here my xml-doc:

<?xml version = "1.0"?>
<!DOCTYPE ADDRBOOK PUBLIC "-//marco/gg//DE" "xtest.dtd">
<ADDRBOOK>
        <ENTRY ID="gn">
                <NAME>Gegbefuna Nwannem</NAME>
                <ADDRESS>666 Murtala Mohammed Blvd.</ADDRESS>
                <PHONENUM DESC="Home">999-101-1001</PHONENUM>
                <EMAIL>nwanneg@naija.ng</EMAIL>
        </ENTRY>
</ADDRBOOK>

any ideas

ma
-- 
*******************************************************
Marco Machmer

Phone : +49-2638-94 666 4
Fax   : +49-2638-94 666 7
email : mailto:marco@morca.de
www   : http://www.Marco-Machmer.de 
Um ein tadelloses Mitglied einer Schafherde
sein zu koennen, muss man vor allem ein Schaf sein.
Albert Einstein