在安卓中,重复写入XML文件的最高效方法是什么?

3

我正在编写一个应用程序,需要在一天内多次向现有的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文件。 - J. Maes
很不幸,我需要XML文件始终存在于SD卡上,这是一个无法改变的要求。 - Mendhak
2
将XML文件视为纯文本文件可以实现,但在将来更改文件结构时会带来问题。除了使用数据库选项外,如果您经常更新文件,则可以将结构保留在内存中,并每次从头开始创建文件。还要考虑将文件拆分成几个部分。 - SJuan76
2
我有一个相当模糊的答案,但是保持单例线程来不断更新文件并且永远不释放文件对象。这样有帮助吗? - Gyan
1个回答

1

你应该尝试使用JAXB。它是一个Java XML绑定库,大多数Java 1.6 JDK都包含它。JAXB允许您指定XML模式定义文件(并具有一些实验性的DTD支持)。然后该库将为您编译Java类,以便在代码中使用,这些类可以将其转换回XML文档。

它非常快速和有用,可选择支持验证。这个是一个很好的起点。这个也是另一个值得看看的好资源。Eclipse还提供了一些很棒的工具,可以为您生成Java类,并提供一个漂亮的GUI工具来创建XSD。我相信Eclipse插件被称为Davi。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接