我的问题对某些人来说很简单,对其他人(像我一样(来说是不可能的
我有一个XML文件,我想把它分成小的XML文件,当然,当我在<DOCUMENT>
Element上达到一定的数量时,我必须拆分它,我必须在每个小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 我可以拆分它,但它只会从每个循环中获取一个元素和我的"文档"循环的所有元素
你可以 Stax API 来读取文件,然后将 60 个这个元素放在一个新文件中。有关示例,您可以阅读此答案
在示例中,将为每个元素创建文件。在您的问题中,您可以像这样每 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);
}