Проверка больших файлов XML на большие XSD, есть ли быстрый способ сделать это?

Я пытаюсь быстро проверить большие документы XML против больших XSD. XML может быть длиной от 500 до 39000 строк, а XSD – в диапазоне 2000-3000 строк.

Результат до сих пор был ужасно низкой производительностью, инициализация синтаксического анализатора с такими большими XSD может занять до 30 секунд, однако это прекрасно, поскольку мы можем сделать это один раз, а затем просто ввести его.

Но, когда дело доходит до фактического использования этого для проверки XML, в зависимости от реализации это может занять от 30 секунд до 2 минут.

Это действительно странно, как инструмент командной строки, называемый xmllint: xmllint --schema test.xsd valid.xml и ту же работу, но заканчивается мгновенно.

Я пробовал библиотеку JDOM, метод SAXReader, и я поселился в jdom2, вот как я его строю:

 URL xsd = Resources.getResource("test-xml/test.xsd"); XMLReaderJDOMFactory factory = new XMLReaderXSDFactory(xsd); builder = new SAXBuilder(factory); 

И вот разбор в действии:

 InputStream stream = new ByteArrayInputStream(inputXml.getBytes()); Document document = builder.build(stream); 

Компонент builder.build – это линия, которая должна быть граничной.

Что касается желаемого решения, я не возражаю против использования C, Kotlin, независимо от того, насколько выходной разумно читать и быстро.

благодаря

Таким образом, ответ пришел к тому, что было на самом деле внутри XSD, в частности значение maxOccurs. В какой-то момент maxOccurs были настроены на 4999, что вызывает ошибку, указанную здесь: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6483188

Если фактическое количество maxOccurs не относится к вам, вы можете изменить значение maxOccurs на «неограниченное». Или вы можете снизить значения maxOccurs, на моей машине значение maxOccurs 1000 дало результат около 1 секунды для анализа значений, а затем 99 около 300 мс. С неограниченным, также находящимся в 300 мс.

Это значительно ниже, чем за 50 секунд, чтобы проанализировать значение maxOccurs, равное 4999

Intereting Posts
Dagger 2 обменивается экземпляром объекта между ведущими Почему универсальные типы алгебраических данных требуют `T` для типов членов? Элементы представления Android NavigationView Headerlayout не запускают события щелчка Используя Flux вместо цикла for, какие-либо преимущества? ImageIO Не удается прочитать входной файл (Kotlin) XML в / из Java / Kotlin, кросс-платформенный Свойства Kotlin не могут быть переопределены с помощью subinterface Доступ к информации из группы BroadcastReceiver в Android с использованием kotlin Почему этот код не был возвращен на этикетке в Котлине что эквивалентно этому котлинскому коду java Android Retrofit + SimpleXmlConverter с пустой сущностью Ошибка при запуске Android (написанного в Kotlin), скомпилированном с Gradle2.0.0-alpha плагином Как правильно настроить плагин Kotlin для Gradle? Как идиоматически проверить непустые, непустые строки в Котлин? Что представляет собой массивOfNulls в Котлине?