Я пытаюсь разбить большой файл XML на более мелкие файлы, используя java SAXParser
(в частности, дамп википедии, который составляет около 28 ГБ без сжатия).
У меня есть класс 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
, что кажется немного болезненным. Или есть более простой способ?
Все, что я хочу сделать, это прокрутить файл и записать его, время от времени прокручивая выходной файл. Как же это сложно :)
Спасибо