Java:使用SAXParser拆分大型XML文件

我正在尝试使用java的SAXParser将大型XML文件拆分为较小的文件(特别是未压缩的大约28GB的维基百科转储)。

我有一个扩展DefaultHandlerPagehandler类:

 private class PageHandler extends DefaultHandler { private StringBuffer text; ... @Override public void startElement(String uri, String localName, String qName, Attributes attributes) { text.append(""); } @Override public void endElement(String uri, String localName, String qName) { text.append(""); if (qName.equals("page")) { text.append("\n"); pageCount++; writePage(); } if (pageCount >= maxPages) { rollFile(); } } @Override public void characters(char[] chars, int start, int length) { for (int i = start; i < start + length; i++) { text.append(chars[i]); } } } 

所以我可以写出元素内容没问题。 我的问题是如何获取元素标签和属性 – 似乎没有报告这些字符。 充其量我将不得不从startElement作为参数传递的内容重建这些 – 这看起来有点痛苦。 或者有更简单的方法吗?

我想要做的就是遍历文件并将其写出来,每隔一段时间就滚动输出文件。 这有多难啊:)

谢谢

我不太确定我完全理解你要做的是什么,但是要将限定名称作为字符串获取,只需执行qName.toString()并获取属性名称,只需执行atts.getQName(int index)

这里的问题是你自己编写XML元素。 看看dom4j的XMLWriter类 – 虽然它XMLWriter ,但通过调用它的startElementendElement方法可以很容易地输出XML文档。