Я пытаюсь выбрать структуру XML-обработки для своих проектов Java, и я теряюсь в именах. XOM, JDOM и т.д. Где я могу найти подробное сравнение всех популярных фреймворков Java XML?
Где я могу найти подробное сравнение фреймворков Java XML?
Ответ 1
Как заметил Блейз, придерживались стандартов. Но за этот период создано несколько стандартов для решения различных проблем/случаев. Какой из них выбрать полностью зависит от вашего требования. Я надеюсь, что приведенное ниже сравнение поможет вам выбрать правильный вариант.
Теперь есть две вещи, которые вам нужно выбрать. API и реализации API (их много)
API
SAX: Плюсы
- основан на событиях
- эффективная память
- быстрее, чем DOM
- поддерживает проверку схемы
SAX: минус
- Нет объектной модели, вам нужно события и создать себя.
- Одиночный анализ xml и может только идти вперед
- только для чтения api
- поддержка xpath
- немного сложнее использовать
DOM: Плюсы
- объектная модель в памяти
- сохраняет порядок элементов
- двунаправленным
- читать и писать api
- xml MANIPULATION
- прост в использовании
- поддерживает проверку схемы
DOM: Против
- память для больших XML-документов (обычно используется для XML-документов менее 10 мб).
- медленнее
- общая модель, т.е. работа с узлами
Stax: Pros
- Лучший из SAX и DOM, т.е. простота DOM и эффективность SAX
- эффективная память
- Модель Pull
- читать и писать api
- поддерживает подпункт
- может одновременно читать несколько документов в одном потоке
- параллельная обработка XML проще
Stax: Cons
- поддержка проверки схемы (пока как я помню, не знаю, есть ли у них добавили его сейчас)
- может идти только вперед, как sax
- no xml MANIPULATION
JAXB: Pros
- позволяет вам получать доступ и обрабатывать 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 wrapper api. JAXP позволяет вам переключать реализации через конфигурацию без необходимости изменения кода. Он также предоставляет независимый parser/spec api для анализа, преобразования, проверки и запросов XML-документов.
Производительность и другие сравнения различных реализаций
- Stax: http://java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf
- Большая часть API: http://www.ibm.com/developerworks/xml/library/x-databdopt2/
- JAXB против обсуждения XmlBeans на SO: JAXB vs Apache XMLBeans
- http://www.ibm.com/developerworks/xml/library/x-injava/
Теперь стандарты хороши, но время от времени вы сталкиваетесь с этим сумасшедшим usecase, где вам нужно поддерживать синтаксический анализ XML-документа, размер 100 гигабайт, или вам нужно сверхбыстрая обработка XML (может быть, вы используете XML-чип парсера), и это когда вам нужно сбросить стандарты и искать другой способ делать вещи. Его использование правильного инструмента для правильной работы! И здесь я предлагаю вам взглянуть на vtd-xml
В первые дни SAX и DOM людям нужен более простой API, чем любой из них. JDOM, dom4j, XmlBeans, JiBX, Castor - те, которые, как я знаю, стали популярными.
Ответ 2
@Pangea
JAXB напрямую не сопоставим с DOM и SAX. Java DOM и SAX парсинг API - это API нижнего уровня для анализа XML-документов, а JAXB (Java API для привязки XML) - это API более высокого уровня для преобразования XML элементов и атрибутов иерархии объектов Java (и наоборот). Реализации JAXB, скорее всего, будут использовать парсер DOM или SAX за кулисами для фактического анализа входных данных XML.