我正在尝试读取一个看起来像这样的 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
部分:解析器调用其字符处理程序两次,一次使用“Jos”,一次使用“A. Blakeley”。现在我明白如果它不知道 eacute 实体,这可能是正确的行为。但是,这是在我拥有的 dblp.dtd 中定义的。不过,我似乎无法说服 expat 使用此文件。我只能说
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)
但外籍人士仍然无法识别我的实体。为什么没有办法告诉 expat 使用哪个 DTD?我试过了
- 将文件放入与 XML 相同的目录中
- 将文件放入程序的工作目录
- 用绝对路径替换xml文件中的引用
我错过了什么?谢谢。