2008-09-02 2 views
28

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

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

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

+1

Для простого в использовании инструмента Windows вы можете использовать [XML ValidatorBuddy] (http://www.xml-tools.com/ValidatorBuddy.htm), который использует синтаксический анализатор Xerces SAX внутренне для проверки огромных файлов. – Clemens 2011-09-02 06:16:35

ответ

30

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

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

+0

похоже, что это будет работать и под libxml2, правильно? – oob 2011-10-07 13:58:37

2

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

1

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