Базы данных SQL-DDL и SQL-DML. Изучение транзакций. Программирование на языке SQL. Консольное приложение (Цикл лабораторных работ). Вариант № 2, страница 21

import java.util.Collection;

import java.util.LinkedList;

import org.xml.sax.Attributes;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

import org.xml.sax.XMLReader;

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.helpers.XMLReaderFactory;

/**

 * Парсер XML-файлов с информацией о фильмах

 *

 * @author Wert Tanya

 */

public class XMLFilmParser extends DefaultHandler{

 private Collection<Film> films = new LinkedList<Film>();

    /**

     * Конструктор парсера.

     * Создает парсер и считывает информацию из заданного XML-файла

     *

     * @param fileName      имя файла

     * @throws SAXException исключение при разборе

     * @throws IOException  исключение, связанное с ошибками ввода-вывода

     */

    public XMLFilmParser(final String fileName) throws SAXException, IOException {

        super();

        // Создаем парсер

        final XMLReader xr = XMLReaderFactory.createXMLReader();

        // Настраиваем обработчик событий разбора

        xr.setContentHandler(this);

        // Настраиваем обработчик ошибок разбора

        xr.setErrorHandler(this);

        // Выполняем разбор.

        // В процессе разбора вызываются обработчики,

        // в том числе startElement().

        // Информация о студентах накапливается

        // в процессе разбора в коллекции students.

        xr.parse(new InputSource(new FileReader(fileName)));

    }

    /**

     * Обработчик события разбора открывающего тэга для элемента

     * @param uri           универсальный идентификатор ресурсов пространства имен

     * @param localName     локальное имя элемента (без префикса пространства имен)

     * @param qName         полное имя элемента (включая префикс пространства имен)

     * @param attributes    атрибуты

     * @throws SAXException исключение при разборе

     */

    @Override

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

        if ("films".equals(localName)) {

            // Очищаем список фильмов в начале разбора элемента "films"

            films.clear();

        } else if ("film".equals(localName)) {

            // Извлекаем атрибуты для элемента "film"

            final String name = attributes.getValue("name");

            final String year = attributes.getValue("year");

            final String duration = attributes.getValue("duration");

            final String budget = attributes.getValue("budget");

            // Создаем объект фильма и добавляем в коллекцию фильмов

            films.add(new Film(0, name, Integer.parseInt(year), Integer.parseInt(duration),

                    Integer.parseInt(budget)));

        }

    }

    /**

     * Получить список фильмов.

     * Создает и возвращает копию коллекции фильмов.

     * При изменении копии исходная коллекция остается прежней.

     * @return  копия коллекции студентов

     */

    public Collection<Film> getFilms() {

        return new LinkedList<Film>(films);

    }

}

Результаты выполнения программы:

Example1:

аргументы командной строки: -o_films

результат:

Manhattan (1979)

The Terminator 2: Judgment Day (1991)

Titanic (1997)

The Lord of the Rings: The Fellowship of the Ring (2001)

The Lord of the Rings: The Two Towers (2002)