2009-07-27 15 views
0

大規模なXMLファイルのルート要素に属性を追加する最も速い方法は何ですか?これらのファイルは大きすぎてメモリに読み込めません。できるだけ多くのI/Oペナルティを避けたいと思います。Javaで大量のXMLファイルの先頭に属性を追加する最も効率的な方法は?

+0

これは新しく定義されたattですか? – akf

+0

新しく定義された属性。具体的には、JAXBがオブジェクトを非整列化できるように名前空間属性。 – Brian

+0

名前空間宣言を属性として扱うように注意してください。パーサーは特別な扱いをしますが、その情報を属性としてAPIに公開することはできません。 – skaffman

答えて

5

テキストを最初または最後に挿入する場合は、ファイル全体を書き直す必要はありませんか?一度にすべてをメモリに入れたくない場合、SAXパーサは(InputStreamを介して)バッファ入力に適応可能でなければなりません。

ファイル全体を書き換えても、メモリに一度に書き込まれたというヒットはありません。基本的には、ファイルを解析して、SAXイベントを聞き取り、それらのイベントから新しいファイルを書き出します。 SAXパーサーは、属性を追加するための適切な状況もリッスンします。

+0

優れた答え:) –

0

Javaでファイルを書き直すことは事実上不可能です(システムレベルでファイルを調整している場合でもこれを行うことはできませんが、多分...)。ファイルを書き換える最も効率的な方法は?

可能であれば、私はすべてのXMLパーサーを避け、自分自身を作成し​​ます。これにより、この新しい属性をファイル内のどこに配置する必要があるのか​​を簡単に特定できる必要があります。あなたがそれに合うように文字列を思いつくことができるなら、あなたは一度に少しずつ読むことができ、挿入ポイントをスキャンし、あなたがそこに着くときに余分なデータを挿入し、残りの部分をコピーし続けます。

関連する問題