Java分割xml文件

标签 java xml

我正在编写一段代码来分割文件。 我想拆分平面文件(没关系,工作正常)和 xml 文件。 这个想法是根据要分割的文件数量进行分割: 我有一个文件,我想将其拆分为 x 个文件(x 是参数)。 我通过获取文件的大小并将大小除以要拆分的文件数来进行拆分。 然后,我的解决方案是使用 BufferedReader 并像使用它一样

while ((n = reader.read(buffer, 0, buffer.length)) != -1) {


{

主要问题是,对于 xml 文件,我不能只拆分它,但我必须基于由开始 xml 标记和结束 xml 标记分隔的 block 来拆分它:

<start tag>
bla bla xml stuff
</end tag>

所以我不能在中间切一 block 。因此,如果当我在一个 block 的一半时,我的新文件的大小大于我的最大值,我将必须读取直到标签末尾,然后开始下一个文件。

问题是我有各种各样的情况,并且搜索结束标记有点困难。 - 该 block 读取文本直到结束标记的中间 - 该 block 读取文本直到结束标记结束,之后不再有其他字符 - ETC 并同时进行循环并读取下一个 block 。 有时,一个 block 的结尾与下一个 block 的开头连接在一起,我有结束 xml 标记。 我希望你能明白。

我的问题是,是否有人有一些算法可以更准确地处理所有特殊情况?

这个想法是尽快分割文件。 我不想使用lib将文件视为xml文件,因为 block 的大小可以更小或很大,而且我不知道内存是否足够。或者有一些库没有全部加载到内存中?

非常感谢。

下面是我的 xml 文件的示例;

<?xml version="1.0" encoding="UTF-8" ?> 
 <myTag service="toto" version="1.5.18" >
 <endOfPeriodTradeNotification  version="1.5.18">
 .............
 </endOfPeriodTradeNotification>
 <endOfPeriodTradeNotification  version="1.5.18">
 .............
 </endOfPeriodTradeNotification>
 <endOfPeriodTradeNotification  version="1.5.18">
 .............
 </endOfPeriodTradeNotification>
 <inventoryDate>2009-12-31</inventoryDate> 
 <!--  reporting date --> 
  <processingDate>2010-01-29T00:00:00</processingDate> 
 </myTag>

我忘记了一件事:我的xml文件可以全部写在第一行, 所以我无法猜测一行有一个标签。

最佳答案

尽管您已经声明您不想使用将其视为 XML 文件的库。您可能需要考虑使用 SAX。

使用 SAX,而不是 DOM,您对内存的担忧就会减轻,因为整个文件不会加载到内存中,但当您的应用程序读取文件并遇到 XML 标志(例如开始和结束标记)时,就会发生事件。

SAX 也相当快。

此快速入门指南应该有所帮助:http://www.saxproject.org/quickstart.html

关于Java分割xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810826/

相关文章:

java - 如何使用两个对象中最特殊的类型作为返回类型?

java - 在异步任务上或异步任务中执行多个任务,并从 postexecute 返回数据

java - 将 XML 拆分为多个 xml 文件

c# - Xml 文档不应该作为 String 传递,如何激励?

java - 为 Linux 安装 JDK : the keytool command requires a mounted proc fs (/proc). Windows 子系统时出错

java - 忽略默认构造函数并在Java中使用带参数的构造函数

php - 每周将 XML 文件保存到数据库

java - 从 .properties 文件加载消息时出错

java - Cogroup 5 RDD(获取Tuple5或更多)

android - 使用 'bind' 和 'app' 命名空间设置自定义属性与 Android DB 之间的区别?