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