Подтвердить что ты не робот

Проверка файла HUGE XML

Я пытаюсь найти способ проверки большого XML файла на XSD. Я видел вопрос ... лучший способ проверки XML..., но ответы все указывали на использование библиотеки Xerces для проверки. Единственная проблема заключается в том, что когда я использую эту библиотеку для проверки файла 180 МБ, я получаю исключение OutOfMemoryException.

Есть ли другие инструменты, библиотеки, стратегии для проверки файла XML большего размера, чем обычный?

EDIT: решение SAX работало для проверки Java, но два других предложения для инструмента libxml были очень полезны для проверки вне java.

4b9b3361

Ответ 1

Вместо использования DOMParser используйте SAXParser. Это читается из входного потока или считывателя, поэтому вы можете хранить XML на диске, а не загружать его все в память.

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);

SAXParser parser = factory.newSAXParser();

XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new SimpleErrorHandler());
reader.parse(new InputSource(new FileReader ("document.xml")));

Ответ 2

Используйте libxml, который выполняет проверку и имеет режим потоковой передачи.

Ответ 3

Лично мне нравится использовать XMLStarlet, который имеет интерфейс командной строки и работает с потоками. Это набор инструментов, построенных на Libxml2.

Ответ 4

SAX и libXML помогут, как уже упоминалось. Вы также можете попытаться увеличить максимальный размер кучи для JVM с помощью опции -Xmx. Например. для установки максимального размера кучи до 512 МБ: java -Xmx512m com.foo.MyClass