我正在调整以下代码(通过中的建议创建这个问题 https://stackoverflow.com/questions/2835077/lxml-unicode-entity-parse-problems),它采用 XML 文件及其 DTD,并将它们转换为不同的格式。对于这个问题,只有加载部分很重要:
xmldoc = open(filename)
parser = etree.XMLParser(dtd_validation=True, load_dtd=True)
tree = etree.parse(xmldoc, parser)
在使用文件系统时,这工作得很好,但我将其转换为通过 Web 框架运行,其中两个文件通过表单加载。
加载 xml 文件工作正常:
tree = etree.parse(StringIO(data['xml_file'])
但由于 DTD 链接到 xml 文件的顶部,因此以下语句失败:
parser = etree.XMLParser(dtd_validation=True, load_dtd=True)
tree = etree.parse(StringIO(data['xml_file'], parser)
Via 这个问题 https://stackoverflow.com/questions/15798/how-do-i-validate-xml-against-a-dtd-file-in-python, 我试过:
etree.DTD(StringIO(data['dtd_file'])
tree = etree.parse(StringIO(data['xml_file'])
虽然第一行不会导致错误,但第二行会落在 DTD 旨在拾取的 unicode 实体上(并且在文件系统版本中也是如此):
XMLSyntaxError:实体“eacute”不是
定义,第 4495 行,第 46 列
我该如何正确加载此 DTD?