Создать XML-файл с большим количеством узлов (10 миллионов) - PullRequest
2 голосов
/ 28 июня 2011

Я пытался создать файл для теста с 10 000 000 узлов, таких как:

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
            .newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory
            .newDocumentBuilder();
    Document document = documentBuilder.newDocument();
    Element rootElement = document.createElement("root");
    document.appendChild(rootElement);
    for (int i = 1; i <= 10000000; i++) {
        Element em = document.createElement("ch");
        em.appendChild(document.createTextNode("ch_data"));
        rootElement.appendChild(em);
    }
    TransformerFactory transformerFactory = TransformerFactory
            .newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(document);
    StreamResult result = new StreamResult(new File("c:/file1.xml"));
    transformer.transform(source, result);

Но получена ошибка:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at   com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.
createElement(CoreDocumentImpl.java:620)
    at main.CreatXMLFile.main(CreatXMLFile.java:27)

Существует ли другая библиотека для создания файлов XML с более чем 10 000 000 узлов в Java?

Ответы [ 5 ]

5 голосов
/ 28 июня 2011

Для таких простых файлов: рассмотрите возможность записи XML-файла без использования DOM или StAX:

writeToFile("<root>\n");
for (int i = 0; i < 10000000; i++) {
  writeToFile("<ch>" + getData(i) + "</ch>\n");
}
writeToFile("</root>\n");

Вот и все - вам просто нужен метод, который записывает String в файл.И способ получить ваши текстовые данные.

5 голосов
/ 28 июня 2011

Используйте StAX для записи XML в виде потока, так что весь документ не должен находиться в памяти.

1 голос
/ 28 июня 2011

Вы можете попробовать использовать SAX-парсер или JDOM

DOM-парсер создает внутреннее дерево на основе иерархической структуры данных XML.система, парсер не создает никакого внутреннего представления документа.Вместо этого анализатор вызывает функции-обработчики, когда происходят определенные события (определенные в спецификации SAX).Эти события включают в себя начало и конец документа, поиск текстового узла, поиск дочерних элементов и попадание в некорректный элемент.

Если вам нужно проанализировать и обработать огромные документы XML, реализации SAX предлагают больше преимуществ по сравнению с DOMна основе.

0 голосов
/ 28 июня 2011

Вы можете попробовать, увеличив объем памяти для JVM.

Существует несколько способов создания XML-файла в java.Мы можете найти пример в следующей ссылке.

http://www.javazoom.net/services/newsletter/xmlgeneration.html

0 голосов
/ 28 июня 2011

Вы можете попытаться увеличить объем памяти, выделенной для JVM.

Но зачем вам нужен весь файл в памяти?Если для этого нет веских причин, вам не следует этого делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...