非常に多数の独立したレコードからなるXML文書を処理する必要があります。大きなXML文書からストリーミングイテレータ[Node]を取得するにはどうすればよいですか?
<employees>
<employee>
<firstName>Kermit</firstName>
<lastName>Frog</lastName>
<role>Singer</role>
</employee>
<employee>
<firstName>Oscar</firstName>
<lastName>Grouch</lastName>
<role>Garbageman</role>
</employee>
...
</employees>
場合によっては、これらは単なる大きなファイルですが、ストリーミングソースからのものである場合もあります。
scala.xml.XmlLoader.load()は、ドキュメント全体をメモリに保持する(または入力ストリームが閉じるのを待つ)必要がないため、作業する必要があるだけなので一度に1つのレコード。私は、XmlEventReaderを使用して、入力を一連のXmlEventsとしてストリーミングできることを知っています。しかし、これらはscala.xml.Nodeよりも操作するのがずっと簡単ではありません。
だから私は制御の下でメモリ使用量を維持しながら、便利なScalaの構文を使用して、個々のレコードの上で動作するために、何とかこのうち怠惰なイテレータ[ノード]を取得したいのですが。これを自分で行うには
、私は、XMLEventReaderので始まり、各マッチング開始と終了タグの間のイベントのバッファを構築し、そのノードからツリーを構築することができます。しかし、私が見落とした簡単な方法はありますか?どんな洞察にも感謝します!
ブリリアント!これは素晴らしいです。このジェネレータスタイルのものからIteratorを得るにはあまりにも難しくありません。私の他の答えを見てください。どうもありがとう! –