【问题标题】:Java - Split XML file that contains many loopsJava - 包含许多循环的拆分 XML 文件
【发布时间】:2017-06-23 07:36:56
【问题描述】:

我的问题对某些人来说很简单,而对其他人(比如我)来说是不可能的

我有一个 XML 文件,我想将它拆分成小的 XML 文件,当然当我在 <DOCUMENT> 元素上达到一定数量时我必须拆分它,我必须在每个小文件中放入 60 个 <DOCUMENT> XML 文件。

我的文件格式是这样的:

<DOCS>
      <PIL>
          <ELEMENT1>
          <ELEMENT2>                   
          <ELEMENT1>
      <PIL>
      <DOCUMENT>
          <ELEMENT1>
          <ELEMENT2>
          <ELEMENT3>
          <ELEMENT4>
                <SUBELEMENT1>
                            <ELEMENT1>
                            <ELEMENT1>
                            <ELEMENT1>
                </SUBELEMENT1>
                <SUBELEMENT2>
                            <ELEMENT1>
                            <ELEMENT1>
                            <ELEMENT1>
                </SUBELEMENT2>
          </ELEMENT4>
          <ELEMENT5>
          <ELEMENT6>
      </DOCUMENT>
</DOCS>

所以我的问题是如何将它拆分为每个文件中有 60 个 &lt;DOCUMENT&gt; ?并且做得很快。

如果有人有使用 Talend 的解决方案,那就太好了。知道使用 tXMLOutput 我可以拆分它,但它只会从每个循环中获取一个元素以及我的“文档”循环的所有元素

【问题讨论】:

  • 1.获取内容 2. 拆分 3. 然后根据拆分结果创建文件
  • 感谢您提出不同的要求

标签: java xml split talend


【解决方案1】:

您可以使用 Stax API 来读取文件,然后将 60 个此元素放入一个新文件中。例如,您可以阅读this answer

在示例中,为每个元素创建文件。在您的问题中,您可以像这样每 60 次迭代创建一个不同的文件

int counter=0;
int fileNumber=1;
File file = new File("out/split1.xml");
StreamResult sr=new StreamResult(file);
while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
    counter++;
    if (counter>60) {
       counter=0;
       fileNumber++;
       file = new File("out/split"+fileNumber+".xml");
       sr=new StreamResult(file);
    }
    t.transform(new StAXSource(xsr), sr);
}

【讨论】:

  • 我尝试了下面的选项,但我可以将每 60 个元素放入一个新文件中
  • 我尝试了这种方法,但它每 60 个元素创建一个文件,其中仅包含一个 &lt;DOCUMENT&gt; 元素(它不会附加所有 60 个元素)
  • 同样使用这种方法,我会丢失 &lt;PIL&gt; 元素和其中的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2011-09-12
  • 2023-04-02
  • 2019-09-01
  • 2021-05-26
  • 2021-08-19
  • 1970-01-01
相关资源
最近更新 更多