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

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

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

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

В качестве простого в использовании инструмента Windows вы можете использовать XML ValidatorBuddy, который внутренне использует синтаксический анализатор Xerces SAX для проверки огромных файлов.

Clemens 02.09.2011 10:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
29
1
11 701
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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")));

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

@oob Да, libxml2 работает отлично. Кроме того, если кто-то ищет двоичные файлы Windows, они здесь: ftp.zlatkovic.com/libxml

sfarbota 05.05.2014 21:09

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

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

Другие вопросы по теме