2012-01-21 34 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

相关问题