XML API для лучшей производительности - PullRequest
3 голосов
/ 04 июля 2011

У меня есть приложение, которое работает с большим количеством данных XML. Итак, я хочу спросить вас, какой API является лучшим для обработки XML в Java. Сегодня я использую W3 и для производительности хочу перейти на какой-нибудь API. Я делаю XML из 0, много преобразований, импортирую в базу данных ( mysql , mssql и т. Д.), Экспортирую из базы данных в html, модифицирую эти XML и многое другое.

Является ли JDOM лучшим вариантом? Вы знаете что-то лучше, чем JDOM ? Я слышал (читая страницы) о javolution . Кто-нибудь этим пользуется?

Какой API вы мне порекомендуете?

Ответы [ 3 ]

2 голосов
/ 04 июля 2011

Если у вас огромные объемы данных, главное - не загружать их все в память сразу (потому что она будет использовать огромный объем памяти и предотвращает перекрытие операций ввода-вывода и обработки).К сожалению, я считаю, что большинство DOM и DOM-подобных библиотек (например, DOM4J) делают именно это, поэтому они не очень хорошо подходят для эффективной обработки огромного количества XML.

Вместо этого обратите внимание на использование потокового API, такого как SAXили StAX.По моему опыту, StAX обычно проще в использовании.

Существуют и другие API, которые пытаются повысить удобство работы с DOM с производительностью SAX.Javolution может быть одним; VTD-XML - это другое.Но, честно говоря, я считаю, что с StAX довольно легко работать - это в основном фантастический поток, поэтому вы просто думаете точно так же, как если бы вы читали текстовый файл из потока.

Одна вещь, которую вы могли быПопробуйте объединить JAXB с StAX.Идея состоит в том, что вы передаете файл в потоковом режиме с помощью StAX, а затем используете JAXB, чтобы демаршировать фрагменты в нем.Например, если вы обрабатывали фид Atom , вы могли бы открыть его, прочитать за заголовком, а затем работать в цикле, отсеивая элементы entry по объектам по одному за раз.Это действительно работает, только если ваш формат состоит из последовательности независимых элементов, таких как Atom;это было бы бесполезно для чего-то более богатого, например, XHTML.Вы можете увидеть примеры этого в справочной реализации JAXB и в блоге парня .

1 голос
/ 04 июля 2011

Ответ зависит от того, какие аспекты производительности важны для вашего приложения.Одним из факторов является то, обрабатываете ли вы большие XML-документы.

Для синтаксического анализа подходы на основе DOM плохо масштабируются для больших документов.Если вам нужно проанализировать большие документы, парсеры, не использующие DOM, например, использующие SAX и StAX, будут работать быстрее и потреблять меньше ресурсов.Однако, если вам нужно преобразовать XML после синтаксического анализа с использованием XSL или DOM API, вам в любом случае понадобится весь документ в памяти.

Для создания XML из кода StAX предоставляет хороший APIза это.Поскольку этот подход основан на использовании потоков, он хорошо подходит для написания очень больших документов.

0 голосов
/ 04 июля 2011

Ну, большинство разработчиков, которых я знаю и я, мы используем dom4J , возможно, если у вас будет время, вы можете написать небольшой тест производительности с использованием обеих платформ, тогда вы увидите разницу.Я предпочитаю dom4j.

...