1

このようなxmlファイルを読み込もうとしています

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp>
<incollection>
<author>Jos&eacute; A. Blakeley</author>
</incollection>
</dblp>

問題のある外観を作成するポイントは、

Jos&eacute; A. Blakeley

パート:パーサーは、キャラクターハンドラーを2回呼び出します。1回は「Jos」、もう1回は「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ファイルの参照を絶対パスに置き換えます

私は何が欠けていますか?どうも。

4

2 に答える 2

1

私が理解しているように、pyexpatを直接使用している場合はExternalEntityRefHandler、外部DTDをフェッチしてexpatにフィードするために独自のものを提供する必要があります。

たとえばを参照してください。xml.sax.expatreaderたとえば、コード(メソッドexternal_entity_ref、Python 2.6の374行目)。

可能であれば、SAX(via)などの高レベルのインターフェースを使用することをお勧めしexpatreaderます。

于 2010-05-21T13:00:05.447 に答える
0

ところで、.dtdの関連部分をXMLファイル自体にコピーすることで、一時的に自分自身を助けることができます。

<!DOCTYPE dblp [
    <!ENTITY Agrave  "&#192;" >
]>

しかし、それは一般的な方法で問題を実際に解決するわけではありません。

于 2010-05-21T13:01:08.817 に答える