2017-06-23 18 views
0

我的問題很簡單,對於一些,只是不可能的其他人(比如我)爪哇 - 斯普利特XML文件,其中包含許多循環

我有一個XML文件,我想將它拆分成小的XML文件,當然我的當我達到某個指定的計數時,我已經將它分開了,我必須在每個小XML文件中放入60個<DOCUMENT>

我的文檔格式化這樣的:

<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 <DOCUMENT>?並做得非常快。

如果有人有使用Talend的解決方案,那就太棒了。明知使用tXMLOutput我可以拆分,但將只需要每個迴路一個元素,我的「文件」循環

+0

1.獲取內容 2.把它分解 3.然後創建基於分割結果 –

+1

感謝文件要求不同 –

回答

1

的所有元素,您可以您閱讀該文件,然後斯塔克斯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); 
} 
+0

我試過選項下面,但我可以得到它把每60個元素在一個新的文件 –

+0

更新迴應 –

+0

我試過這個方法,但它創建一個文件每60個元素只包含一個''元素(它doesen't追加所有的60元素) –