我正在尝试使用java的SAXParser
将大型XML文件拆分为较小的文件(特别是未压缩的大约28GB的维基百科转储)。
我有一个Pagehandler
类,扩展了DefaultHandler
:
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
的参数传递的内容重建这些 - 这看起来有点痛苦。或者有更简单的方法吗?
我想做的就是遍历文件并将其写出来,每隔一段时间滚动输出文件。这有多难:)
由于
答案 0 :(得分:1)
我不太确定我完全理解你要做什么,但是要将限定名称作为字符串获取,只需执行qName.toString()
并获取属性名称即可atts.getQName(int index)
。
答案 1 :(得分:0)
这里的问题是你自己编写XML元素。看看XMLWriter
class的dom4j - 虽然它有点旧,但通过调用startElement
和endElement
方法可以很容易地输出XML文档。