Примеры использования XML в Java (JDOM)

На днях мне понадобилось хранить настройки моей Java программы в файле. Не долго думая, я выбрал формат данных XML. В Java существует несколько различных библиотек для взаимодействия с ним. Например, такие как DOM, SAX, JDOM. Посмотрев на структуру каждой библиотеки, я решил использовать JDOM. Мне уже приходилось работать с XML в C#, а JDOM очень похож интерфейсом поставляемым с .NET. Кого заинтересовало — прошу под кат.

Библиотеку JDOM вы можете скачать здесь. Распакуйте архив и добавьте ее в проект. Не забудьте подключить:

И так, поставим себе задачу построить следующий XML файл:

Примечание: автор не является противником того или иного производителя ноутбуков. Все названия и параметры элементов XML выбраны в качестве примера и могут совсем не соответствовать действительности.

Каждый XML документ имеет единственный корневой элемент. Создадим новый такой элемент и сам документ:

Все интуитивно понятно. Конструктор элемента принимает в качестве аргумента строку, то есть его имя, а конструктор документа — элемент, то есть корневой элемент. Теперь добавим пару атрибутов к нашему элементу:

У объекта элемента весьма очевидные методы для добавления атрибутов. Кроме того, добавить атрибут можно несколькими методами, это добавляет гибкости в процессе программирования. Теперь добавим в rootElement, другой элемент:

Это один из способов добавления элемента. Он может показаться неудобным, так как у нас нет прямой ссылки на объект дочернего элемента. Но это не так! Конструктор элемента, а также многие другие методы, возвращают ссылку на созданный объект, поэтому если нам необходимо, например, добавить атрибут, можно сделать следующее:

Кроме того, можно сделать даже так:

Правда выглядит это не очень читабельно. Но есть и более наглядный метод создания дочерних элементов:

Если нам необходимо получить доступ к какому либо элемент, а ссылка на него утеряна, можно сделать следующее:

Кроме элементов, а так же их атрибутов можно добавлять просто текст или комментарии:

Теперь когда у нас есть готовый XML документ, было бы не плохо сохранить его в файл. Для этого нужно воспользоватся классом XMLOutputter. Вот пример сохранения созданного документа:

XMLOutputter может выводить данные в любой поток, в нашем примере это файл. Format определяет вид получаемого XML контента.

Теперь рассмотрим считывания данных из готового XML документа. Для нам понадобится SAXBuilder. Вот пример программы, которая считывает из файла output.xml название корневого элемента, а так же список его дочерних элементов:

В результате вызова метода build, объекта SAXBuilder мы получаем такой же документ, как и при создании XML файла. Это позволяет добавлять, удалять и редактировать все XML элементы в текущем документе.

Как видите, ничего сложного в JDOM нет. Задавайте свои ответы, отписываетесь в комментариях. Удачи.

Комментарии 13

  • Не поленился оставит комент. Большое спасибо за статью. Весь день искал парсинг + ява. Статья шикарная!

  • спасибо, спасибо, спасибо )

  • Всем привет, есть задача. Нужно создать Java-оконное приложение для добавления в уже сущкствующие 2 xml- файла определенных (считаных с TextBox-ов) данных (как числовых так и, в основном, String). С Java пока на вы, знакомс написанием консльных прог, ну и само собою ООП, а тут для продолжения контракта условие — напигшешь продолжим контракт, нет — досвидания. Смерти в этом нету, но простримулирован еще как. Буду рад любым посказкам и помощи.

    • самая тупая подсказка — читайте документацию и туториалы к классу org.jdom.input

    • Почитайте про Swing. Если вам нужно быстро набросать оконное приложение, можете попробовать NetBeans IDE. Потом проанализируйте как устроен ваш XML файл. После чего склейте все до кучи.

  • Отличная статья, автору спасибо!

  • Спасибо, как раз искал нечто похожее на .Net, по работе с xml!!

  • Спасибо за статью, всё понятно и просто)

  • может вы сможете подсказать начинающему программисту какие паттерны java лучше использовать с XML документами. мне нужно реализовать 2-3. буду признательна за ответ

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *