2012-01-19 3 views
0

いくつかのノードを他のものに変換するために非常に大きなxmlでDOM-stlye処理を行いたいと思います。JavaのXMLパイプライン

これは私が

... 
<node> 
    <stuff>text-and-numbers</stuff> 
</node> 
... 

持っているものの一例であり、これは<node>...</node>出力部内のすべての情報は、の<node>text-and-numbers</node>を処理するプログラム的に抽出された私は、出力に必要なもの

... 
<node> 
    <info>some text</info> 
    <more>some text</more> 
    <id>some text</id> 
</node> 
... 

です入力。つまり、出力の内容が<node>であるgetInfo(someText)という関数があります。

私はDOMの方法でそれを行うコードを持っていますが、XMLのサイズが大きすぎてメモリが必要すぎるという問題があります。別の方法でやりたいのです。

誰かが私を助けてくれることを願っています。

+0

このXMLはファイルから取得していますか? –

+0

はい、私はそれをSAXで再構築することができました。ネット上で見つかったXMLWriterクラスを拡張しています。 –

答えて

3

SAXまたはStAXを調べるべきだと思います。前者は、DOMツリー全体をメモリ内に保持する必要がないことを意味します。後者はストリーミングパーサーです。

+0

ありがとうございますが、SAXの問題は、静かなコードを書くことなく、すべての入力XMLを出力に「ダンプ」することは非常に難しいということです。そして、私はStAXパイプラインの "簡単な"試験を見つけられませんでした。 –

+0

あなたの毒を選択してください - コードを書くか、DOMに頼ります。あなたのXMLがそれほど大きければ、あまり選択肢がありません。 – duffymo

+0

はい、私は今、SAXをもう一度比較するために探すことができる "パイプライン" StAXの例はありますか? –