XMLファイル – 2

by ますお

早速やってみたのですが,ハマりました.

どうも腑に落ちないので,ちょっと書いてみようと思います.

次のようなXMLファイルがあるとします.

<elem1>
  <elem2>
  </elem2>
</elem1>

このファイルを二つコピーして,test1.xml,test2.xmlとします.中身は全く同じ物です.

これを以下のようにしてparseすると,test1.xmlは平気なんですが,test2.xmlの処理中にエラーが出てしまいます.

files = ['test1.xml', 'test2.xml']
psr = xml.parsers.expat.ParserCreate()
for f in files:
    file = open(f, 'r')
    psr.ParseFile(file)
    file.close()

ところが,以下だと平気なんです.

files = ['test1.xml', 'test2.xml']
for f in files:
    psr = xml.parsers.expat.ParserCreate()
    file = open(f, 'r')
    psr.ParseFile(file)
    file.close()

どうも納得行かないので,PerlのXML::Parserで同じXMLファイルをforeach内で読ませてみた所,エラーは出ませんでした.

parserオブジェクトを毎回作るなんてやりたくないんですけど,使い方が間違っているのでしょうか?それとも単にモジュールのバグなんでしょうか?