[lxml-dev] Can't load external DTD.

Nef Asus nefasus at gmail.com
Wed Feb 20 16:42:57 CET 2008


Hello everyone, 
I've written this little program that refuses to work:

from lxml import etree
if __name__ == "__main__":
    xml_input = "C:\Desarrollo\pythontests\lxml\foo.xml"
    parser = etree.XMLParser(load_dtd = True, dtd_validation = True, 
attribute_defaults = True)
    doc = etree.parse(xml_input, parser)


Here's the traceback.
Traceback (most recent call last):
  File "C:\Desarrollo\pythontests\lxml\dtd_loader.py", \
     line 27, in <module> doc = etree.parse(xml_input, parser)
  File "lxml.etree.pyx", line 2515, in lxml.etree.parse
  File "parser.pxi", line 1755, in lxml.etree._parseDocument
  File "parser.pxi", line 1759, in lxml.etree._parseDocumentFromURL
  File "parser.pxi", line 1681, in lxml.etree._parseDocFromFile
  File "parser.pxi", line 826 ,in lxml.etree._BaseParser._parseDocFromFile
  File "parser.pxi",line 450,in lxml.etree._ParserContext._handleParseResultDoc
  File "parser.pxi", line 534, in lxml.etree._handleParseResult
  File "parser.pxi", line 476, in lxml.etree._raiseParseError
lxml.etree.XMLSyntaxError: failed to load external entity "NULL", 
line 9, column 83

This is a snippet of foo.xml :
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE rem:requirementsProject 
   SYSTEM "C:\Desarrollo\pythontests\lxml\foo.dtd">
...


Then, I tried to write a custom resolver.

from lxml import etree
class DTDResolver(etree.Resolver):
    def resolve(self, url, id, context):
        print("Resolving (url, %s)(id, %s)"% (url,id))
        self.resolve_filename("C:\Desarrollo\pythontests\lxml\JENSEN.dtd", \
 context)
        
if __name__ == "__main__":
    parser = etree.XMLParser(load_dtd = True, dtd_validation = True,
attribute_defaults = True)
    parser.resolvers.add(DTDResolver())
    xml_input = "C:\Desarrollo\pythontests\lxml\foo.xml"
    doc = etree.parse(xml_input, parser)


But it still fails (same traceback).
What am I doing wrong? 
BTW, lxml version is 2.0.1.
Thanks in advance.



More information about the lxml-dev mailing list