Siena. です。

▼ [ruby-list:35130] < NAKAMURA, Hiroshi さん

》そうですね。↑のストリーミングを実装しようとすると、「全部読み込んで変換してから」が不可なので、

不可というのは、全部読んで変換してからでは、ファイルを
読みながらの「ストリーミング」にならないから、でしょうか?

ストリーミング性は捨ててしまって、XML の構成要素の出現毎に
イベントハンドラを呼ぶ形態の API (pull API ?) で十分ならば、
CES を意識しないパーサをラップしてしまえば利用できますね。
Uconv か iconv が使えるようになってないといけませんけれど。

readline して(*)、encoding を見て、rewind して、readlines して、
必要なら $_[0] の XML 宣言を 'utf-8' に書き換えて、join して、
uconv (or iconv) して、StringIO でラップして、parse_stream する、と。

あたしは普段、こんな風にしてコード変換してから
REXML::Document.new するラッパークラスを使ってます。
当然、ファイルなどに書き出す時は逆の変換をしてます。

# (*) は XML 宣言は、記述されているならば文書の
# 最初に現れなければいけないので、これで十分な筈 ^^;

もしくは、File をラップするようなクラスを作って、
エンコーディングの変換をしながら読めるようにすると
全部まとめて読むような事はしないですみますね。

で本題(何)はこっちなのですが、どなたかこういう
File クラスがどこかに転がっていたら教えてください ^^;;

---
Siena. <mailto:siena / cr.chiba-u.ac.jp>