从文件末尾解析XML文件

时间:2013-08-16 13:28:54

标签: java xml

我想使用XML来存储一些数据。但是当我想要获取插入的最后数据时,我不想读取完整文件,并且我不想在那里添加新数据时重写完整文件。 java中是否有一种标准方法来解析xml文件,而不是从头开始,而是从头开始。因此,例如SAX或StaX解析器将首先遇到最后一个关闭根标记而不是最后一个标记。或者,如果我想这样做,我应该读写所有内容,就像我正在阅读/编写常规文本文件一样?

3 个答案:

答案 0 :(得分:3)

从根本上说,XML是一种糟糕的表示选择。这种格式固有地“包含”,我没有看到任何鼓励你反对的API。

选项:

  • 完全选择其他格式(例如使用数据库)
  • 创建许多小型XML文件 - 每个文件都是自包含的。如果需要整个数据,请阅读所有文件
  • 每次只需吞下命中并读/写整个文件。

答案 1 :(得分:1)

我找到了一个很好的主题,并提供了我想要的示例解决方案。 此链接:http://www.oreillynet.com/xml/blog/2007/03/parsing_xml_backwards.html 似乎XML不是很好的文件格式来实现我想要的。没有标准的解析器可以从最终解析XML而不是开始。

可能最好的解决方案是将所有xml数据存储在一个包含许多xml文件内容组成的文件中。在每行存储单独的XML内容。文件本身不是格式良好的XML,但每行包含格式良好的xml,我将使用标准xml解析器(StaX)进行解析。

这样我就可以只从文件末尾读取行并将新数据附加到文件末尾。当我需要整个数据或只需要它的一部分时,我将读取它们的所有行或部分。可能我也可以从文件末尾实现分页,因为文件可能很大。

为什么每行都有XML?我认为使用API​​来解析它很容易,而且在xml中存储数据是人类可读的,而不是仅仅用一些符号将行中的值分开。

答案 2 :(得分:0)

为什么不使用sax / stax并只处理你的最后一个条目?是的,它需要打开并浏览整个文件,但至少它相当有效,而不是加载整个DOM树。

如果不这样做,我认为你不能用你所要求的XML作为源。

另一个替代,除了Jon Skeet在他的回答中提供的那个,将是保持相同的格式,但首先插入最新的条目,并在你一旦停止处理文件阅读你的参赛作品。