Проверка огромного XML-файла - PullRequest
28 голосов
/ 03 сентября 2008

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

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

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

Ответы [ 4 ]

30 голосов
/ 03 сентября 2008

Вместо использования 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 голосов
/ 03 сентября 2008

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

3 голосов
/ 03 сентября 2008

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

1 голос
/ 10 марта 2009

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

...