Я пытаюсь выбрать фреймворк обработки XML для своих проектов Java, и я теряюсь в именах ... XOM, JDOM и т. Д. Где я могу найти подробное сравнение всех популярных фреймворков Java XML?
Где я могу найти подробное сравнение фреймворков Java XML?
Ответы (2)
Как указал Блэз, придерживайтесь стандартов. Но за период было создано несколько стандартов для решения различных проблем / сценариев использования. Какой из них выбрать, полностью зависит от ваших требований. Я надеюсь, что приведенное ниже сравнение поможет вам выбрать правильный.
Теперь вам нужно выбрать две вещи. API и реализации API (их много)
API
SAX: Плюсы
- на основе событий
- эффективная память
- быстрее, чем DOM
- поддерживает проверку схемы
SAX: недостатки
- Нет объектной модели, вам нужно подключиться к событиям и создать себя
- Одиночный синтаксический анализ xml и может идти только вперед
- только чтение api
- нет поддержки xpath
- немного сложнее использовать
DOM: Плюсы
- объектная модель в памяти
- сохраняет порядок элементов
- двунаправленный
- читать и писать api
- xml МАНИПУЛЯЦИЯ
- простой в использовании
- поддерживает проверку схемы
DOM: минусы
- потребление памяти для больших XML-документов (обычно используется для XML-документов размером менее 10 МБ)
- помедленнее
- общая модель, т.е. вы работаете с узлами
Stax: Плюсы
- Лучшее из SAX и DOM, то есть простота DOM и эффективность SAX
- эффективная память
- Вытяните модель
- читать и писать api
- поддерживает подпарсинг
- может читать несколько документов одновременно в одном потоке
- параллельная обработка XML проще
Stax: против
- нет поддержки проверки схемы (насколько я помню, не уверен, добавили ли они ее сейчас)
- может идти только вперед, как саксофон
- нет манипуляции с xml
JAXB: плюсы
- позволяет получать доступ к данным XML и обрабатывать их, не зная XML
- двунаправленный
- более эффективная память, чем DOM
- SAX и DOM - это общие парсеры, тогда как JAXB создает парсер, специфичный для вашего XML Schmea
- преобразование данных: JAXB может преобразовывать XML в типы Java
- поддерживает МАНИПУЛЯЦИЮ XML через объектный API
JAXB: минусы
- может анализировать только действительный XML
Trax: для преобразования XML из одной формы в другую с помощью XSLT.
Реализации
SAX, DOM, Stax, JAXB - это просто спецификации. Существует множество коммерческих реализаций этих спецификаций с открытым исходным кодом. В большинстве случаев вы можете просто придерживаться того, что поставляется с JDK или вашим сервером приложений. Но иногда вам нужно использовать другую реализацию, которая предоставляется по умолчанию. И здесь вы можете оценить API-интерфейс оболочки JAXP. JAXP позволяет переключать реализации через конфигурацию без необходимости изменять код. Он также предоставляет независимый от парсера / спецификаций 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 против Apache XMLBeans
- http://www.ibm.com/developerworks/xml/library/x-injava/
Сейчас стандарты хороши, но время от времени вы сталкиваетесь с этой сумасшедшей ситуацией, когда вам нужно поддерживать синтаксический анализ XML-документа размером 100 гигабайт или вам нужна сверхбыстрая обработка XML (возможно, вы реализуете микросхему синтаксического анализатора XML), и именно тогда вам нужно отказаться от стандартов и искать другой способ делать что-то. Речь идет об использовании правильного инструмента для правильной работы! И здесь я предлагаю вам взглянуть на vtd-xml
В первые дни SAX и DOM люди хотели более простые API, чем предоставляемые ими. JDOM, dom4j, XmlBeans, JiBX, Castor, как я знаю, стали популярными.
@Pangea
JAXB нельзя напрямую сравнивать с DOM и SAX. API-интерфейсы синтаксического анализа Java DOM и SAX представляют собой API-интерфейсы нижнего уровня для анализа XML-документов, а JAXB (API-интерфейс Java для привязки XML) представляет собой API-интерфейс более высокого уровня для преобразования элементов и атрибутов XML в иерархию объектов Java (и наоборот). Реализации JAXB, скорее всего, будут использовать парсер DOM или SAX за кулисами для фактического анализа входных данных XML.