J'essaie de diviser un gros fichier XML en fichiers plus petits en utilisant le SAXParser
de java (en particulier le fichier wikipedia qui est d'environ 28 Go non compressé).Java: découpage d'un gros fichier XML avec SAXParser
J'ai une classe Pagehandler
qui s'étend 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]);
}
}
}
Je peux donc écrire le contenu de l'élément sans problème. Mon problème est comment obtenir les balises et les attributs d'élément - ces caractères ne semblent pas être rapportés. Au mieux, je vais devoir les reconstruire à partir de ce qui est passé comme arguments à startElement
- ce qui semble un peu difficile. Ou y a-t-il un moyen plus facile? Tout ce que je veux faire est de parcourir le fichier et de l'écrire, en roulant le fichier de sortie de temps en temps. À quel point cela peut-il être :)
Merci
VTD-XML est idéal pour séparer des fichiers XML volumineux, l'édition étendue prend en charge le format xml jusqu'à 256 gb, elle prend également en charge mem-map et vous pouvez également utiliser xpath –