【发布时间】:2018-10-31 22:00:41
【问题描述】:
我无法根据元素数将大型 xml 文件拆分为更小的文件。我从上一个问题中找到了一些代码,这些代码可用于按标签拆分,但似乎无法按元素计数拆分文件。将元素计数设置为 100 后将创建一个文件。如果我增加计数,文件的大小会增加,但不会创建多个文件来占整个原始 xml 文件。
public class Splitter {
private static void appendStuff(String content, File file) throws IOException {
FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
}
public static void main(String[] s) throws Exception {
String prefix = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "\n";
String suffix = "\n</RCStatus>\n";
int count = 0;
try {
int i = 1;
XMLInputFactory xif = XMLInputFactory.newInstance();
XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("Carriers.xml"));
xsr.nextTag(); // Advance to statements element
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
File file = new File("\\Desktop\\xml\\" + "status" + i + ".xml");
FileOutputStream fos = new FileOutputStream(file, true);
appendStuff("<RCStatus>", file);
while (xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
count++;
t.transform(new StAXSource(xsr), new StreamResult(fos));
if(count == 100) {
count = 0;
i++;
appendStuff("</RCStatus>", file);
fos.close();
file = new File("\\Desktop\\xml\\" + "status" + i +".xml");
fos = new FileOutputStream(file, true);
appendStuff("<RCStatus>", file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
<RCStatus>
<H>
<T>a</T>
<A>E</A>
<V>12</V>
<R>S</R>
</H>
<C>
<Co>I</Co>
<RM>5</RM>
<Ta/>
<MC>xx</MC>
<DOT>1</DOT>
<A1>xxx</1>
<A2 />
<Cy>x</Cy>
<St>I</St>
<Z>x</Z>
<Ct>xx</Ct>
<T>VP</T>
<P>x</P>
<F>xxx</F>
<E>x</E>
<Pa />
<PaA />
<PaC />
<PaSt />
<PaZ />
<Cl = />
<iISN />
<iISS />
<Ds />
<Pay2 />
<PC />
<C>U</C>
<IF />
</C>
</RCStatus>
【问题讨论】:
-
你能发布一个(小)示例 xml 文件来查看它的结构吗?
-
@aka-one 我已编辑问题以包含代码的 sn-p
-
我现在看到 xml 文件被拆分为一个较小的文件,其中包含前 1,000 行重复 4 次而不是前 4,000 行。