StaxEventItemWriter 用于吐出带有标题的大型 XML 文件

问题描述

我需要将一些旧的 java 批次迁移到 spring 批次。这些旧批次正在读取大型 XML 文件 ( >1gb ) 并将它们拆分为小型 XML 文件。所以我们有以下场景:

  1. 输入:Big1File.xml -> 输出:Small1.1File.xml、Small1.2File.xml、 Small1.3File.xml
  2. 输入:Big2File.xml -> 输出:Small2.1File.xml,Small2.2File.xml
  3. 输入:Big3File.xml -> 输出:Small3.1File.xml、Small3.2File.xml、 Small3.3File.xml,Small3.4File.xml

这个xml文件的结构总是一样的:

<?xml version="1.0"?>
 <info>
  <header>
   <headerField1></headerField1>
   <headerField2></headerField2>
  </header>
  <elements>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
    ....
  </elements>
 </info>

我一直在阅读有关 StaxEventItemReader 和 StaxEventItemWriter 的文档和示例,但我不确定是否可以使用 Writer 的默认版本。

StaxEventItem 类是否是拆分此类 xml 文件的好选择?

通常示例是没有标题元素的 xml,基本上是带有元素列表的 xml:

<?xml version="1.0"?>
 <info>
  <elements>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
   <element>
    <elementField1></elementField1>
    <elementField2></elementField2>
    <elementField3></elementField3>
   </element>
    ....
  </elements>
 </info>

如果我没有错,我需要做的是扩展 StaxEventItemWriter,然后我就可以为每个输出文件添加标题,我正确吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)