2

別のシステムからエクスポートされた XML ファイルを解析するために、次のように lxml を使用しています。

xmldoc = open(filename)
etree.parse(xmldoc)

しかし、私は得ています:

lxml.etree.XMLSyntaxError: エンティティ 'eacute' が定義されていません、行 4495、列 46

明らかに、Unicode エンティティ名に問題がありますが、どうすればこれを回避できますか? open() または parse() 経由ですか?

編集:同じフォルダーに自分の DTD を含めるのを忘れていました。現在そこにあり、次の宣言があります。

<!ENTITY eacute "&#233;">

xmldoc では次のように参照されます (常に参照されていました)。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE DScribeDatabase SYSTEM "foo.dtd">

それでも私は同じ問題を抱えています... PythonでもDTDを宣言する必要がありますか?

4

1 に答える 1

6

eacuteXML で定義済みのエンティティではありません。&eacute;エンティティ参照を XML ファイルに含めるには、エンティティ<!DOCTYPE>を定義する DTD (XHTML 1.0 DTD など) を指す宣言が含まれている必要があります。

XML が を使用&eacute;していても を持っていない場合は、整形<!DOCTYPE>式ではなく、エクスポートしたシステムを修正する必要があります。

é( XML ファイルで表現するためにエンティティ参照を使用する正当な理由はありません。文字参照は、何らかの理由&#233;でファイルが生の UTF-8 を単純に含めることができない場合、エンティティ定義がなくてもどこでも理解されます。)é

于 2010-05-14T14:58:06.290 に答える