ElementTree/DTD question

Fredrik Lundh fredrik at pythonware.com
Wed Mar 16 08:41:13 EST 2005


Greg Wilson wrote:

> My first attempt was this XML file:
>
> ----------------------------------------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE lec [
>  <!ENTITY ldots "&#x8230;">
> ]>
> <lec title="Introduction">
> <topic title="Motivation" summary="motivation for course">
> <slide>
>  <b1>Write an introduction&ldots;</b1>
> </slide>
> </topic>
> </lec>
>
> ----------------------------------------------------------------------
>
> Running "python validate.py first.xml" produces:
>
> ----------------------------------------------------------------------
>
> Traceback (most recent call last):
>  File "validate.py", line 7, in ?
>    ElementTree.parse(filename)
>  File "C:\Python23\Lib\site-packages\elementtree\ElementTree.py",
> line 865, in parse
>    tree.parse(source, parser)
>  File "C:\Python23\Lib\site-packages\elementtree\ElementTree.py",
> line 589, in parse
>    parser.feed(data)
>  File "C:\Python23\Lib\site-packages\elementtree\ElementTree.py",
> line 1160, in feed
>    self._parser.Parse(data, 0)
>  File "C:\Python23\Lib\site-packages\elementtree\ElementTree.py",
> line 1113, in _default
>    raise expat.error(
> xml.parsers.expat.ExpatError: undefined entity &ldots;: line 9, column
> 27
>
> ----------------------------------------------------------------------

looks like a bug in the Python version of elementtree.  you can either switch
to cElementTree, or apply the following patch:

Index: elementtree/ElementTree.py
===================================================================
--- elementtree/ElementTree.py  (revision 2315)
+++ elementtree/ElementTree.py  (working copy)
@@ -1120,7 +1120,7 @@
         self._target = target
         self._names = {} # name memo cache
         # callbacks
-        parser.DefaultHandler = self._default
+        parser.DefaultHandlerExpand = self._default
         parser.StartElementHandler = self._start
         parser.EndElementHandler = self._end
         parser.CharacterDataHandler = self._data

(for quicker responses to elementtree questions, use the xml-sig mailing list)

</F> 






More information about the Python-list mailing list