Thursday, October 18, 2012

Java Практика - Занятие 8

На восьмом занятии мы рассмотрели работу с XML файлами в Java. Про то, что такое XML, я не рассказывал в курсе Java для тестировщиков и на этом занятии тоже не останавливался — подразумевается, что Вы это уже знаете. Мы рассмотрели три базовых способа взаимодействия со структурными файлами XML: чтение и поиск с помощью SAX, чтение и создание с помощью DOM, и маршалинг и демаршалинг с помощью JAXB. Мы рассматривали работу с очень простыми XML документами без схем или DTD описаний.

SAX-парсер — это самый простой способ чтения XML документа и поиска информации в нём. Однако, в силу своей простоты, обработка чуть более сложных документов (с множеством уровней иерархии элементов) становится очень трудоёмкой задачей. На практике применяется, скорее, для очень простых, либо очень больших по объёму документов. SAX-парсер встроен в саму Java, и никаких дополнительных библиотек для его использования не нужно. На этом ресурсе (англ.) есть простой пример по чтению документа этим парсером. Также, там внизу ссылка на то, как читать UTF-8 XML документ c помощью SAX.

Другой способ чтения XML документов — это использование объектной модели документа DOM. Данный способ позволяет также легко модифицировать и создавать документ. Так как структура XML файлов представлена в виде иерархии, то ее легко отобразить с помощью объектов в Java, где можно выделить родителя (Document) со списком потомков (Element), у которых могут быть свои потомки и т.д. DOM — это программный интерфейс, и существует различные его реализации. В самой Java есть классическая реализация, но большей популярностью пользуется библиотека JDOM. Попросту говоря, в ней больше полезных функций, и поэтому работать с ней легче. Собственно, на видео я приводил примеры функций как раз этой библиотеки. На том же англ. ресурсе есть простые и хорошие примеры как читать XML с помощью DOM и как создавать документ. Также там есть пример, как читать документ с помощью JDOM и создавать его.

Еще одним способом работы с XML документами, который уже можно отнести к классическим — это использование JAXB: отображения XML в Java классы. Раньше, эта технология была доступна при подключении дополнительной библиотеки, но сейчас она уже включена в ядро Java. Суть отображения можно вкратце описать так: приложение, которое обрабатывает информацию, представляет данные в виде иерархии и взаимосвязи различных объектов; определенные поля в этих объектах (которые описаны в соответствующих классах) помечаются мета-информацией (в нашем случае, аннотациями), которая используется JAXB для сохранения значений полей в XML документ, а также для чтения их из документа. Процесс сохранения данных называется маршалингом. Процесс чтения — демаршалингом. Использовать JAXB очень удобно, если цель Вашего приложения — это не работа с XML, а работа с информацией. А так как информацию надо где-то хранить и где-то брать, и если это «где-то» - это XML-файл, то процесс ввода/вывода можно сделать достаточно прозрачным и легко модифицируемым. И снова, тот же англ. ресурс содержит пример работы с JAXB.

Так как XML — это достаточно взрослый формат представления данных, то очень много написано документации по работе с ним на любом языке.

В качестве домашнего задания для данного урока, можно выполнить следующее:

  1. Создать XML документ.
  2. Найти какую-либо информацию в документе с помощью SAX-парсера.
  3. Прочитать весь документ с помощью DOM-парсера (или JDOM) и вывести его на экран. 
  4. Создать несколько взаимосвязанных классов с несколькими полями и отобразить их с помощью JAXB: сохранить XML документ и прочитать его. Для тех, кто выполнял задания из нескольких первых занятий, то можно добавить аннотации к классам Product и сохранить информацию о продуктах в XML.
Ну и, собственно, видео занятия:

Read More...