У меня есть огромный XML файл (15 ГБ). Я хочу преобразовать тег "text" в XML файл на одну страницу.
Пример файла XML:
<root>
<page>
<id> 1 </id>
<text>
.... 1000 to 50000 lines of text
</text>
</page>
... Like wise 2 Million `page` tags
</root>
Я изначально использовал парсер DOM, но он выбрасывает JAVA OUT OF MEMORY (Действительный). Теперь я написал код JAVA, используя STAX. Он работает хорошо, но производительность очень медленная.
Это код, который я написал:
XMLEventReader xMLEventReader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream(filePath));
while(xMLEventReader.hasNext()){
xmlEvent = xMLEventReader.nextEvent();
switch(xmlEvent.getEventType()){
case XMLStreamConstants.START_ELEMENT:
if( element == "text")
isText = true;
break;
case XMLStreamConstants.CHARACTERS:
chars = (Characters) xmlEvent;
if(! (chars.isWhiteSpace() || chars.isIgnorableWhiteSpace()))
if(isText)
pageContent += chars.getData() + '\n';
break;
case XMLStreamConstants.END_ELEMENT:
String elementEnd = (((EndElement) xmlEvent).getName()).getLocalPart();
if( elementEnd == "text" )
{
createFile(id, pageContent);
pageContent = "";
isText = false;
}
break;
}
}
Этот код работает хорошо. (Игнорируйте любые незначительные ошибки). Согласно моему пониманию, XMLStreamConstants.CHARACTERS выполняет итерацию для каждого текстового тега. Если в теге TEXT имеется 10000 строк, XMLStreamConstants.CHARACTERS выполняет итерацию для следующих 10000 строк. Есть ли лучший способ повысить производительность??