Проверка ОГРОМНОГО XML-файла

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

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

РЕДАКТИРОВАТЬ: решение SAX работало для проверки java, но два других предложения для инструмента libxml также были очень полезны для проверки вне java.


person Dan Cramer    schedule 02.09.2008    source источник
comment
Чтобы упростить использование инструмента Windows, вы можете использовать XML ValidatorBuddy, который использует синтаксический анализатор Xerces SAX. внутренне проверять огромные файлы.   -  person Clemens    schedule 02.09.2011


Ответы (4)


Вместо использования 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")));
person jodonnell    schedule 02.09.2008

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

person John Millikin    schedule 02.09.2008
comment
@oob Да, libxml2 работает отлично. Кроме того, если кто-то ищет двоичные файлы Windows, они находятся здесь: ftp.zlatkovic.com/libxml - person sfarbota; 05.05.2014

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

person dlamblin    schedule 03.09.2008

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

person GaZ    schedule 09.03.2009