【发布时间】:2012-03-09 18:12:53
【问题描述】:
我正在尝试使用 Java 创建一个 XML 文件,它是 GPS 坐标 (GPX) 的集合。每次我从我的 android 设备收到坐标(大约每秒 1 个)时,我都需要将结果附加到现有的 XML 文件中。我正在寻找的输出如下所示,其中 trkpt 元素作为重复项。问题是我不能只将新的 trkpt 添加到文件末尾,因为它需要在 trkseg 父元素内。
到目前为止,我已经尝试了两种不同的 API,SIMPLEXML 和 JDOM。使用 SIMPLEXML,我无法弄清楚如何将子元素附加到现有文件中,因此我切换到了 JDOM。 JDOM 允许我附加 trkpt 元素,如下所示,但是随着文件开始增长,它很快就减慢了程序的用户界面。使用 JDOM,我使用 SAXBuilder 重新打开文件并追加。我认为这个问题是它必须在添加新元素并重写文件之前在内存中复制整个文件。因此,文件越大,设备上的操作要求就越高。我需要一个在写入新数据之前不检查/复制整个文件的解决方案。有没有更有效的方法可以使用 Java 或 Java 的 API 来完成此任务?感谢您的帮助!
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1">
<trk>
<trkseg>
<trkpt lon="9.860624216140083" lat="54.9328621088893">
<ele>228.0</ele>
</trkpt>
<trkpt lon="9.860624216140100" lat="54.9328621088754">
<ele>234.0</ele>
</trkpt>
<trkpt lon="9.860624216140343" lat="54.9328621088678">
<ele>227.0</ele>
</trkpt>
</trkseg>
</trk>
</gpx>
【问题讨论】:
-
您是否总是以相同的方式附加数据?然后考虑逐行读取文件并以“与 XML 无关”的方式附加您的行;只要结果仍然是有效的 XML。
-
您是否能够改为将数据附加到纯文件并稍后将整个文件转换为 XML?或者也许分批转换它?尝试不断更新 XML 似乎让自己的生活变得不必要地困难! ;-)
-
我想您的问题与客户端处理(android)有关,而不是服务器端处理,对吗?
-
@The Nail,我目前每次编辑文件时都以相同的方式附加数据。
-
@DNA 我喜欢你的建议。稍后我将在我的服务器上使用这些数据,届时可以将其处理为 XML。如果一切都失败了,那可能就是我要走的路。