2012-01-21 36 views
3

我正在編寫一個應用程序,它需要將節點重複地添加到現有的XML文件,整天。這裏是節點列表,我想追加的樣本:在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卡。但是,我注意到,隨着文件越來越大,這需要越來越多的時間。

我試圖想到一個更好的方法,這是我能想到的唯一的事情:使用RandomAccessFile加載文件並使用.seek()到文件中的特定位置。我會根據文件長度計算位置,並在我追加的內容後減去我所知道的文件長度。

我很確定這種方法可以工作,但與使用DocumentBuilderFactory的方便性相比,它感覺有點盲目。

有沒有更好的方法來做到這一點?

+4

我會說:使用sqlite而不是xml文件? – Peterdk

+1

數據庫似乎是這種事情的正確解決方案。如果您需要它,您可以在需要時將其轉換爲XML文件。 –

+0

不幸的是,我特別需要XML文件始終在SD卡上,這是一個不變的要求。 – Mendhak

回答

1

您應該嘗試使用JAXB。它是大多數Java 1.6 JDK中的Java XML綁定庫。 JAXB允許您指定XML模式定義文件(並且對DTD有一些實驗支持)。然後,該庫將編譯Java類,供您在您的代碼中使用,然後轉換回XML文檔。

這是非常快速和有用的可選支持驗證。 This將是一個很好的起點。 This將是另一個很好的看看。 Eclipse還爲您生成Java類提供了一些很棒的工具,併爲創建XSD提供了一個很好的GUI工具。我相信Eclipse插件被稱爲Davi。

+0

謝謝你指出這個庫,我會用這個。 – Mendhak

相關問題