我的程序将接收大小高达 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 中,因此您需要额外的依赖项。
基本上你需要做这样的事情:
- 阅读标题并记住它
- 读取记录元素。如果没有更多,请转到步骤 7。
- 您当前有打开的文件吗?如果没有,请打开一个并将 header 写入其中。
- 将记录元素写入当前文件。
- 您是否已达到文件大小限制?如果是这样,请编写页脚并将其关闭。
- 返回第 2 步。
- (阅读完毕。)如果您有打开的文件,请写入页脚并关闭它。
关于java - 以GB为单位分割一个巨大的XML,保留页眉和页脚 - 相同的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304266/