Я пытаюсь прочитать в XML-файл, который выглядит так
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp>
<incollection>
<author>José A. Blakeley</author>
</incollection>
</dblp>
Точка, которая создает проблему, выглядит как
José A. Blakeley
part: парсер вызывает свой обработчик символов дважды, один раз с «Jos», один раз с «A. Blakeley».
Теперь я понимаю, что это может быть правильным поведением, если оно не знает сущность eacute. Тем не менее, это определено в dblp.dtd, который у меня есть. Похоже, я не могу убедить экспата использовать этот файл. Все, что я могу сказать, это
p = xml.parsers.expat.ParserCreate()
# tried with and without following line
p.SetParamEntityParsing(xml.parsers.expat.XML_PARAM_ENTITY_PARSING_ALWAYS)
p.UseForeignDTD(True)
f = open(dblp_file, "r")
p.ParseFile(f)
но экспат все еще не распознает мою сущность. Почему нет способа сообщить экспату, какой DTD использовать? Я пробовал
- помещение файла в тот же каталог, что и XML
- помещает файл в рабочий каталог программы
- замена ссылки в xml-файле на абсолютный путь
Чего мне не хватает? Thx.