1) DOM (парсер JAXP Crimson)
DOM — это официальный стандарт W3C для представления XML-документов независимым от платформы и языка способом. DOM — это набор узлов или фрагментов информации, организованных в иерархическую структуру. Эта иерархия позволяет разработчикам искать в дереве конкретную информацию. Анализ этой структуры обычно требует загрузки всего документа и построения иерархии, прежде чем можно будет выполнить какую-либо работу. Поскольку DOM основан на информационной иерархии, его считают древовидным или объектным. DOM и древовидная обработка в целом имеют ряд преимуществ. Во-первых, поскольку дерево постоянно хранится в памяти, его можно модифицировать, чтобы приложение могло вносить изменения в данные и структуры. Он также позволяет в любое время перемещаться вверх и вниз по дереву, а не выполнять одноразовый процесс, как SAX. DOM также намного проще в использовании.
2) САКС
Преимущества обработки SAX очень похожи на преимущества потокового мультимедиа. Анализ можно начать немедленно, не дожидаясь обработки всех данных. Кроме того, поскольку приложение просто проверяет данные по мере их чтения, нет необходимости хранить их в памяти. Это огромное преимущество для больших документов. Фактически, приложению даже не нужно анализировать весь документ; оно может прекратить анализ при выполнении определенного условия. В целом SAX намного быстрее, чем его замена DOM.
ДОМ или САКС? Для разработчиков, которым необходимо написать собственный код для обработки XML-документов, выбор модели анализа DOM или SAX является очень важным проектным решением. DOM использует древовидную структуру для доступа к XML-документам, а SAX использует модель событий.
Анализатор DOM преобразует XML-документ в дерево, содержащее его содержимое, и может перемещаться по дереву. Преимущество использования DOM для анализа модели заключается в простоте программирования. Разработчикам достаточно вызвать инструкции по построению дерева, а затем использовать API навигации для доступа к необходимым узлам дерева для выполнения задачи. Элементы дерева можно легко добавлять и изменять. Однако, поскольку при использовании анализатора DOM необходимо обработать весь XML-документ, требования к производительности и памяти относительно высоки, особенно при работе с большими XML-файлами. Благодаря своим возможностям обхода анализаторы DOM часто используются в сервисах, где XML-документы должны часто изменяться.
Анализатор SAX использует модель, основанную на событиях. Он может запускать серию событий при анализе XML-документа. Когда заданный тег найден, он может активировать метод обратного вызова, чтобы сообщить методу, что указанный тег найден. SAX обычно требует меньше памяти, поскольку позволяет разработчикам решать, какие теги обрабатывать. Особенно, когда разработчикам нужно обработать только часть данных, содержащихся в документе, масштабируемость SAX лучше отражается. Но при использовании анализатора SAX кодирование становится сложнее, и трудно одновременно получить доступ к нескольким различным данным в одном документе.
3) JDOM http://www.jdom.org
Цель JDOM — стать моделью документа, специфичной для Java, которая упрощает взаимодействие с XML и выполняется быстрее, чем его реализация с использованием DOM. JDOM активно продвигался и продвигался с тех пор, как это была первая модель, специфичная для Java. Его возможное использование рассматривается как «стандартное расширение Java» через «Запрос спецификации Java JSR-102». Разработка JDOM началась с начала 2000-х годов.
Между JDOM и DOM есть два основных различия. Во-первых, JDOM использует только конкретные классы, а не интерфейсы. Это в некотором смысле упрощает API, но также ограничивает гибкость. Во-вторых, API широко использует класс Collections, упрощая его использование для разработчиков Java, которые уже знакомы с этими классами.
В документации JDOM указано, что его цель — «решить 80% (или более) проблем Java/XML, используя 20% (или меньше) усилий» (при условии, что 20% исходя из кривой обучения). JDOM, безусловно, полезен для большинства приложений Java/XML, и большинство разработчиков находят API гораздо более простым для понимания, чем DOM. JDOM также включает в себя довольно обширные проверки поведения программы, чтобы пользователи не могли делать что-либо, что не имеет смысла в XML. Однако для этого по-прежнему требуется, чтобы вы понимали XML достаточно хорошо, чтобы делать больше, чем просто основы (или даже понимать ошибки в некоторых случаях). Это может быть более значимой работой, чем изучение интерфейсов DOM или JDOM.
Сам JDOM не содержит парсера. Обычно он использует анализатор SAX2 для анализа и проверки входных XML-документов (хотя он также может принимать в качестве входных данных ранее созданные представления DOM). Он содержит преобразователи для вывода представлений JDOM в потоки событий SAX2, модели DOM или текстовые документы XML. JDOM — это продукт с открытым исходным кодом, выпущенный по варианту лицензии Apache.
4) DOM4J http://dom4j.sourceforge.net
Хотя DOM4J представляет собой полностью независимую разработку, изначально он был интеллектуальным ответвлением JDOM. Он включает в себя множество функций, выходящих за рамки базового представления XML-документов, включая встроенную поддержку XPath, поддержку XML-схемы и обработку на основе событий для больших или потоковых документов. Он также предоставляет возможности для создания представлений документов с возможностями параллельного доступа через DOM4J API и стандартные интерфейсы DOM. Он находится в разработке со второй половины 2000 года.
Для поддержки всех этих функций DOM4J использует интерфейсы и методы абстрактного базового класса. DOM4J активно использует класс Collections в API, но во многих случаях он также предоставляет альтернативы, которые обеспечивают лучшую производительность или более прямой подход к кодированию. Прямым преимуществом является то, что, хотя DOM4J платит за более сложный API, он обеспечивает гораздо большую гибкость, чем JDOM.
Несмотря на добавление гибкости, интеграцию с XPath и обработку больших документов, цели DOM4J такие же, как и у JDOM: простота использования и интуитивно понятное управление для разработчиков Java. Он также стремится стать более полным решением, чем JDOM, и позволяет решать практически все проблемы Java/XML. При достижении этой цели он уделяет меньше внимания, чем JDOM, предотвращению некорректного поведения приложений.
DOM4J — это очень, очень превосходный Java XML API с отличной производительностью, мощными функциями и чрезвычайной простотой использования. Это также программное обеспечение с открытым исходным кодом. В настоящее время вы можете видеть, что все больше и больше программного обеспечения Java используют DOM4J для чтения и записи XML. Особо стоит отметить, что даже JAXM от Sun также использует DOM4J.
2... сравнить
1) DOM4J имеет лучшую производительность. Даже JAXM от Sun также использует DOM4J. В настоящее время многие проекты с открытым исходным кодом широко используют DOM4J. Например, знаменитый Hibernate также использует DOM4J для чтения файлов конфигурации XML. Если переносимость не имеет значения, используйте DOM4J.
2) JDOM и DOM работали плохо во время тестирования производительности, а память переполнялась при тестировании документа размером 10 МБ. Также стоит рассмотреть возможность использования DOM и JDOM в случае небольших документов. Хотя разработчики JDOM заявили, что планируют сосредоточиться на проблемах производительности до официального выпуска, с точки зрения производительности рекомендовать действительно нечего. Кроме того, DOM по-прежнему остается очень хорошим выбором. Реализация DOM широко используется во многих языках программирования. Он также является основой для многих других стандартов, связанных с XML, и, поскольку он официально рекомендован W3C (в отличие от нестандартной модели Java), он также может потребоваться в определенных типах проектов (например, при использовании DOM в JavaScript).
3) SAX работает лучше, что зависит от конкретного метода синтаксического анализа — управляемого событиями. SAX обнаруживает входящий поток XML, но не загружает его в память (конечно, когда поток XML читается, некоторые документы будут временно скрыты в памяти).
3. Базовое использование четырех методов работы с XML.
XML-файл: