Где я могу найти подробное сравнение фреймворков Java XML? - PullRequest
26 голосов
/ 04 октября 2010

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

Ответы [ 2 ]

61 голосов
/ 27 декабря 2010

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

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

API

SAX: Плюсы

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

SAX: Минусы

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

ДОМ: Плюсы

  • объектная модель в памяти
  • сохраняет порядок элементов
  • двунаправленная
  • чтение и запись API
  • xml МАНИПУЛЯЦИЯ
  • простой в использовании
  • поддерживает проверку схемы

ДОМ: Минусы

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

Stax: Плюсы

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

Stax: Минусы

  • нет поддержки проверки схемы (насколько насколько я помню, не уверен, что у них есть добавил это сейчас)
  • может идти вперед только как саксофон
  • нет xml МАНИПУЛЯЦИЯ

JAXB: Плюсы

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

JAXB: Минусы

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

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

Реализация

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

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


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

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

2 голосов
/ 12 мая 2016

@ Pangea

JAXB против DOM и SAX

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

...