reader2.pyをみて色々試してみた。外部実体の参照に出くわしたときに呼ばれる関数を、libxml2.setEntityLoader(func)
の引数に与えることができる。parseFile
とかparseDoc
とかでxmlDocオブジェクトを作る時でも、xmlTextReaderで読む時でも呼んでくれる。
で、この関数がNoneを返すと実際に外部実体を読みに行き、file-like-objectを返すとそのデータを実体として扱ってくれて、気を効かせたつもりでxmlEntityクラスのインスタンスを返すとフリーズした。わらい。
DTDとかをローカルに保存して、それに置き換えるようにしたのだけれど、手作業が面倒なのでキャッシュさせるようにしてみた。割と良い。