Где я могу найти подробное сравнение фреймворков Java XML?

Я пытаюсь выбрать структуру XML-обработки для своих проектов Java, и я потерялся в именах. XOM, JDOM и т. Д. Где я могу найти подробное сравнение всех популярных фреймворков Java XML?

Как заметил Блейз, палка со стандартами. Но за этот период создано несколько стандартов для решения различных проблем / случаев. Какой из них выбрать полностью зависит от вашего требования. Я надеюсь, что приведенное ниже сравнение поможет вам выбрать правильный вариант.

Теперь вам нужно выбрать две вещи . API и реализации API (их много)

API

SAX: Плюсы

  • событие основано
  • эффективная память
  • быстрее, чем DOM
  • поддерживает проверку схемы

SAX: Против

  • Нет объектной модели, вам нужно задействовать события и создать свое
  • Одиночный синтаксический анализ xml и может идти только вперед
  • читать только api
  • поддержка xpath отсутствует
  • немного сложнее в использовании

DOM: Плюсы

  • объектная модель в памяти
  • сохраняет порядок элементов
  • двунаправленная
  • читать и писать api
  • xml MANIPULATION
  • простой в использовании
  • поддерживает проверку схемы

DOM: Против

  • память для больших XML-документов (обычно используется для документов XML менее 10 мб)
  • помедленнее
  • общая модель, т. е. работа с узлами

Стакс: Плюсы

  • Лучшее из SAX и DOM, т.е. простота DOM и эффективность SAX
  • эффективная память
  • Модель Pull
  • читать и писать api
  • поддерживает подпункт
  • может одновременно просматривать несколько документов в одном streamе
  • parallel processing XML проще

Stax: Против

  • нет поддержки валидации схемы (насколько я помню, не уверен, добавили ли они ее сейчас)
  • может идти только вперед, как саксофон
  • нет xml MANIPULATION

JAXB: Плюсы

  • позволяет вам получать и обрабатывать XML-данные без необходимости знать XML
  • двунаправленная
  • больше памяти, чем DOM
  • SAX и DOM – это общие парсеры, где JAXB создает парсер, специфичный для вашего XML-файла Schmea
  • преобразование данных: JAXB может преобразовывать xml в типы java
  • поддерживает XML MANIPULATION через API объектов

JAXB: Против

  • может только анализировать действительный XML

Trax: для преобразования XML из 1 формы в другую форму с использованием XSLT

Реализации

SAX, DOM, Stax, JAXB – это всего лишь спецификации. Существует множество открытых и коммерческих реализаций этих спецификаций . В большинстве случаев вы можете просто придерживаться того, что поставляется с JDK или вашим сервером приложений. Но иногда вам нужно использовать другую реализацию, предоставленную по умолчанию. И здесь вы можете оценить обертку JAXP api . JAXP позволяет вам переключать реализации через конфигурацию без необходимости изменения кода. Он также предоставляет независимый parser / spec api для анализа, преобразования, проверки и запросов XML-документов.

Производительность и другие сравнения различных реализаций


Теперь стандарты хороши, но время от времени вы сталкиваетесь с этим сумасшедшим usecase, где вам нужно поддерживать parsing XML-документа размером 100 гигабайт или вам нужна ультрабыстрая обработка XML (может быть, вы используете XML-чип парсера), и это когда вам нужно сбросить стандарты и искать другой способ делать вещи. Его использование правильного инструмента для правильной работы! И здесь я предлагаю вам взглянуть на vtd-xml

В первые дни SAX и DOM людям нужен более простой API, чем любой из них. JDOM , dom4j , XmlBeans , JiBX , Castor – те, кого я знаю, которые стали популярными.

@ Pangea

JAXB против DOM и SAX

JAXB напрямую не сопоставим с DOM и SAX. API-интерфейсы Java DOM и SAX – это API-интерфейсы более низкого уровня для анализа XML-документов, тогда как JAXB (Java API для привязки XML) – это API более высокого уровня для преобразования XML-элементов и атрибутов в иерархию объектов Java (и наоборот). Реализации JAXB, скорее всего, будут использовать парсер DOM или SAX за кулисами для фактического анализа входных данных XML.

  • Как конвертировать ISO8601 TimeSpan в C # TimeSpan?
  • Как исправить ошибку: разметка в документе, следующая за корневым элементом, должна быть хорошо сформирована
  • Был найден недопустимый символ XML (Unicode: 0xc)
  • Разрешены ли разрывы строк в значениях атрибутов XML?
  • xml.LoadData. Данные на корневом уровне недопустимы. Строка 1, позиция 1
  • В чем разница между SAX и DOM?
  • Какой XML-парсер следует использовать в C ++?
  • Обновления просмотра списка Android
  • Interesting Posts

    Предотвращение заставки, начиная с приложения в полноэкранном режиме

    Как определить, когда приложение Android переходит на задний план и возвращается на передний план

    Управление ключом API Карт Google с помощью Gradle в Android Studio

    Как изменить цвет текста в JtextArea?

    Каковы недостатки (если они есть) доступа к Интернету через два или более «цепных» маршрутизатора?

    Как отключить кнопку закрытия (X) на вкладках Google Chrome?

    Изменить ярлык для закрытия окон

    Получить имя активного пользователя в скрипте в Mac OS

    Создание видео с изображений с различными SAR с помощью FFMPEG

    Зачем следует избегать функции system () в C и C ++?

    Entity Framework: игнорировать столбцы

    Как оживить просмотр с переводом анимации в Android

    Запустите программу из контекстного меню с admin priveledges (vista UAC)

    Возможно ли обновить BIOS до UEFI?

    Как указать аргументы JVM по умолчанию для программ, которые я запускаю из eclipse?

    Давайте будем гением компьютера.