Я пытаюсь найти способ проверить большой 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, который выполняет проверку. и имеет потоковый режим.
@oob Да, libxml2 работает отлично. Кроме того, если кто-то ищет двоичные файлы Windows, они здесь: ftp.zlatkovic.com/libxml
Лично мне нравится использовать XMLStarlet, который имеет интерфейс командной строки и работает с потоками. Это набор инструментов, построенных на Libxml2.
SAX и libXML помогут, как уже упоминалось. Вы также можете попробовать увеличить максимальный размер кучи для JVM, используя параметр -Xmx. Например. чтобы установить максимальный размер кучи 512 МБ: java -Xmx512m com.foo.MyClass
В качестве простого в использовании инструмента Windows вы можете использовать XML ValidatorBuddy, который внутренне использует синтаксический анализатор Xerces SAX для проверки огромных файлов.