java - 以GB为单位分割一个巨大的XML,保留页眉和页脚 - 相同的结构

标签 java xml parsing split

我的程序将接收大小高达 8GB 到 10GB 的 XML,其结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gsafeed PUBLIC "-//Google//DTD GSA Feeds//EN" "">
<gsafeed>
<header>
<datasource>Name</datasource>
<feedtype>incremental</feedtype>
</header>
<group>
<record url="" action="add" mimetype="text/html" >
<content><![CDATA[ <html> <body><<br></body></html>  ]]>
</content>
</record>
<record url="" action="add" mimetype="text/html" >
<content><![CDATA[ <html> <body><<br></body></html>  ]]>
</content>
</record>
<record url="" action="add" mimetype="text/html" >
<content><![CDATA[ <html> <body><<br></body></html>  ]]>
</content>
</record>
</group>
</gsafeed>

现在我必须以 1 GB(大约)的形式拆分此 XML 文件,保留相同的结构,即每个拆分文件应具有相同的页眉和页脚,但 <record> 的数量除外。节点会更少。

我必须在 JDK 1.4 中执行此操作。

请提出建议。

谢谢

最佳答案

你提前知道页脚吗?如果是这样,您只需要一个流 API,例如 StAX或 SAX - StAX 可能会比 SAX 更容易,但它没有内置到 Java 1.4 中,因此您需要额外的依赖项。

基本上你需要做这样的事情:

  1. 阅读标题并记住它
  2. 读取记录元素。如果没有更多,请转到步骤 7。
  3. 您当前有打开的文件吗?如果没有,请打开一个并将 header 写入其中。
  4. 将记录元素写入当前文件。
  5. 您是否已达到文件大小限制?如果是这样,请编写页脚并将其关闭。
  6. 返回第 2 步。
  7. (阅读完毕。)如果您有打开的文件,请写入页脚并关闭它。

关于java - 以GB为单位分割一个巨大的XML,保留页眉和页脚 - 相同的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304266/

相关文章:

java - 使用曼哈顿距离计算多点之间的最短路径

java - 如何使用 libgdx 中的简单纹理绘制自定义形状?

python - ANTLR4 + Python - 如何从监听器访问片段 token (子 token )?

html - 使用XPath进行HTML解析:扁平化的分层数据

java - 根据 Tomcat 中的请求检查用户

c++ - 如何在 C++ 中进行 soap 调用

android - 为什么列表首选项中的条目没有显示在应用程序中?

Python - 复制元素的属性并粘贴到另一个文本文件上

iPhone - removeObjectIdenticalTo 行为

java - Files.newInputStream 中的 NoSuchFileException 与 StandardOpenOption.CREATE