[英]Java: splitting up a large XML file with SAXParser
我正在尝试使用Java的SAXParser
(特别是Wikipedia转储,未压缩的大小约为28GB)将较大的XML文件拆分为较小的文件。
我有一个扩展DefaultHandler
的Pagehandler
类:
private class PageHandler extends DefaultHandler {
private StringBuffer text;
...
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) {
text.append("<" + qName + ">");
}
@Override
public void endElement(String uri, String localName, String qName) {
text.append("</" + qName + ">");
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
,但通过调用它的startElement
和endElement
方法,它真的很容易输出XML文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.