Mam ogromny XML (~ 2 GB) i muszę dodać nowe elementy i zmodyfikować stare. Na przykład mam:Jak zmodyfikować ogromny plik XML przez StAX?
<books>
<book>....</book>
...
<book>....</book>
</books>
i chcesz uzyskać:
<books>
<book>
<index></index>
....
</book>
...
<book>
<index></index>
....
</book>
</books>
Użyłem poniższy kod:
XMLInputFactory inFactory = XMLInputFactory.newInstance();
XMLEventReader eventReader = inFactory.createXMLEventReader(new FileInputStream(file));
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter(file, true));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.getEventType() == XMLEvent.START_ELEMENT) {
if (event.asStartElement().getName().toString().equalsIgnoreCase("book")) {
writer.writeStartElement("index");
writer.writeEndElement();
}
}
}
writer.close();
Ale wynik był następujący:
<books>
<book>....</book>
....
<book>....</book>
</books><index></index>
Jakieś pomysły?
Jeśli masz wystarczająco dużo pamięci, vtd-xml to opcja, która oferuje drastycznie prostsze kodowanie ... podczas gdy zajmuje o 50% więcej pamięci i zachowuje wszystko w pamięci, nie wysadza się jak DOM http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf –