2012-01-21 9 views
3

私はノードを既存のXMLファイルに繰り返し追加する必要があるアプリケーションを1日を通して作成しています。ここで私が追加しようとしているノードのリストのサンプルです:AndroidでXMLファイルに繰り返し書き込む最も効率的な方法は何ですか?

<gx:Track> 
     <when>2012-01-21T14:37:18Z</when> 
     <gx:coord>-0.12345 52.12345 274.700</gx:coord> 
     <when>2012-01-21T14:38:18Z</when> 
     <gx:coord>-0.12346 52.12346 274.700</gx:coord> 
     <when>2012-01-21T14:39:18Z</when> 
     <gx:coord>-0.12347 52.12347 274.700</gx:coord> 
     .... 

これは数倍まで長い時間をかけて第二に起こることができると私は何の最高または最も効率的な方法は知っていただきたいと思いますそうしている。

これは私が今やっていることです:DocumentBuilderFactoryを使ってXMLファイルを解析し、コンテナノードを探し、子ノードを追加してから、TransformerFactoryを使ってSDカードに書き戻します。しかし、私は、ファイルが大きくなるにつれ、これはますます多くの時間を費やしていることに気付きました。

これは私が考えることができる唯一の方法です:ファイルを読み込み、.seek()をファイル内の特定の位置に使用するには、RandomAccessFileを使用します。私は、ファイルの長さに基づいて位置を計算し、私が追加しているものの後にファイルの長さを知っているものを減算します。

このメソッドはうまくいくはずですが、DocumentBuilderFactoryの使いやすさとは対照的に、少し鈍感です。

これを行うには良い方法がありますか?

+4

xmlファイルの代わりにsqliteを使用しますか? – Peterdk

+1

データベースは、この種のものにとって適切な解決策に見えるでしょう。必要な場合は、XMLファイルに変換することができます。 –

+0

残念ながら、私は具体的にSDカードに常に存在するXMLファイルを必要としています。 – Mendhak

答えて

1

JAXBを試してみてください。これは、Java 1.6 JDKのほとんどに付属するJava XMLバインディングライブラリです。 JAXBではXMLスキーマ定義ファイルを指定できます(DTDの実験的なサポートもあります)。ライブラリは、XML文書に変換されたコードで使用するためのJavaクラスをコンパイルします。

バリデーションのサポートはオプションで非常に迅速かつ便利です。 Thisは良い出発点です。 Thisは見るべきもう1つ良いでしょう。 Eclipseには、Javaクラスを生成し、XSD作成用の素晴らしいGUIツールを提供するための素晴らしいツールがいくつかあります。 EclipseのプラグインはDaviと呼ばれています。

+0

このライブラリを指摘してくれてありがとう、私はこれを使用します。 – Mendhak

関連する問題