我想使用XML来存储一些数据。但是当我想要获取插入的最后数据时,我不想读取完整文件,并且我不想在那里添加新数据时重写完整文件。 java中是否有一种标准方法来解析xml文件,而不是从头开始,而是从头开始。因此,例如SAX或StaX解析器将首先遇到最后一个关闭根标记而不是最后一个标记。或者,如果我想这样做,我应该读写所有内容,就像我正在阅读/编写常规文本文件一样?
答案 0 :(得分:3)
从根本上说,XML是一种糟糕的表示选择。这种格式固有地“包含”,我没有看到任何鼓励你反对的API。
选项:
答案 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在他的回答中提供的那个,将是保持相同的格式,但首先插入最新的条目,并在你一旦停止处理文件阅读你的参赛作品。