Вопрос

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

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

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

Это было полезно?

Решение

Вместо использования 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 , который выполняет проверку , а имеет режим потоковой передачи.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top