Сохранение данных в XML файл
Пишу программу, которая сохраняет услуги и случаи пациентов в XML файл. Услуг каждый раз разное количество примерно от 60 до 100 тыс.
Есть входной список объектов zapis
, который содержит в себе объект patient
и список sluchai
. А каждый объект sluchai
содержит список услуг uslugi
.
Общая схема связи следующая:
Zapis
Pacient
List<Sluchai>
Sluchai
List<Uslugi>
Сейчас запись в XML
файл происходит следующим образом:
public void createXML(List<Zapis> Zapiss) {
List<Zapis> zapisList = Zapiss;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element zagolovok = document.createElementNS("", "zagolovok");
Zglv zglv = new Zglv("1", "1.0", "XML");
zagolovok.appendChild(getZglv(document, zglv));
document.appendChild(zagolovok);
for (Zapis zapis : zapisList) {
zagolovok.appendChild(getZapis(document, Zapis));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(document);
StreamResult file = new StreamResult(new File("C:/tmp/xml.xml"));
transformer.transform(source, file);
}
} catch (TransformerException transformerException) {
transformerException.printStackTrace();
transformerException.getMessageAndLocation();
} catch (ParserConfigurationException parserConfigurationException) {
parserConfigurationException.getStackTrace();
parserConfigurationException.printStackTrace();
}
}
Привожу только метод, где происходит запись в файл. Также есть методы getSluchai, getUslugi, getPacient
, которые вызываются друг в друге, они большие, чтобы не засорять вопрос не привожу
Проблема в том, что запись в xml файл всех этих данных происходит очень долго. Этот метод выполнялся больше двух часов, пока я не прервала. В предыдущий раз выдал ошибку
java.lang.OutOfMemoryError Error
Сама структура xml в итоге выглядит так:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<zagolovok>
<zglv>
***
</zglv>
<zapis>
<pacient>
***
</pacient>
<sluchai>
***
<uslugi>
***
</uslugi>
<uslugi>
***
</uslugi>
</sluchai>
</zapis>
<zapis>
<pacient>
***
</pacient>
<sluchai>
***
<uslugi>
***
</uslugi>
</sluchai>
</zapis>
***
</zagolovok>
Есть ли другой способ записи данных в XML? Не понимаю почему так долго.