安卓开发 Android Cookie

Android 安卓是最开放的手机操作系统,谷歌安卓APP开发和安卓市场的相关话题

在使用SAX进行解析时,如何保留未绑定到对象的XML节点

我正在开发一个与蓝牙相机接口的Android应用程序。 对于存储在相机上的每个剪辑,我们在XML文件中存储关于剪辑的一些字段(其中一些用户可以更改)。 目前,这个应用程序是唯一一个将此xml数据写入设备的应用程序,但将来有可能桌面应用程序或iphone应用程序也可能在此处写入数据。 我不想假设另一个应用程序也没有其他字段(特别是如果他们有一个更新版本的应用程序添加了此版本尚不支持的新字段)。 所以我想要防止的是我们在另一个应用程序中向这个XML文件添加新字段的情况,然后用户开始使用android应用程序并清除其他字段,因为它不知道它们。 让我们假设一个例子: My Title 12/24/2012 Blah 当从设备读取时,这将被转换为看起来像这样的Clip对象(简化为简洁起见) public class Clip { public String title, category; public Date date; } 所以我使用SAX来解析数据并将其存储到Clip中。 我只是将字符存储在StringBuilder中,当我到达标题,类别和日期的结束元素时将它们写出来。 我意识到,当我将这些数据写回设备时,如果原始文档中还有其他标签,则它们不会被写入,因为我只写出我所知道的字段。 这让我觉得SAX可能是错误的选择,也许我应该使用DOM或其​​他东西,我可以更容易地写出最初存在的任何其他元素。 或者我想也许我的Clip类包含一些通用XMLtypes(可能是DOM)的ArrayList,并且在startTag中我检查该元素是否不是预定义标记之一,如果是,直到我到达该标记的末尾我存储整个结构(但在什么?)..然后在写回来时,我将浏览所有其他标签并将它们写出到xml文件(以及我当然知道的字段) 这是一个众所周知的解决方案的常见问题吗? – 更新5/22/12 – 我没有在实际的xml中提到根节点(实际上称为注释),我们使用的版本号已设置为1.我将要做的短期内要求我的应用程序的版本号支持是> = xml数据的版本号是什么。 如果xml是一个更大的数字,我将尝试解析回读,但将拒绝对模型的任何保存。 关于如何做到这一点,我仍然对任何工作实例感兴趣。 顺便说一下,我想到了另一个应该非常简单的解决方案。 我想我可以使用XPATH查找我知道的节点,并在更新数据时替换这些节点的内容。 但是我运行了一些基准测试,当解析xml到内存中时,开销是荒谬的。 只是解析操作甚至没有进行任何查找导致性能比SAX差20倍。使用xpath一般来说解析速度慢30-50倍,考虑到我在列表视图中解析它们,这真的很糟糕。 所以我的想法是让SAX将节点解析为剪辑,但是将整个XML存储在Clip类的variables中(记住,这个xml很短,小于2kb)。 然后,当我将数据写回来时,我可以使用XPATH来替换原始XML中我知道的节点。 仍然对任何其他解决方案感兴趣。 除非它包含一些代码示例,否则我可能不会接受解决方案。