Разработать программу, производящую отображение XML-файлов в виде иерархической таблицы.
Основные требования:
-
xml-Файлы данных брать с Портала открытых данных Правительства Москвы (http://data.mos.ru). Скачать не менее четырех xml-файлов, например, данные по кафе, кофейням, барам и предприятиям быстрого обслуживания.
-
Программа должна предоставлять меню (QMenu), содержащее следующие пункты:
- Файл:
- Открыть (загрузка xml-файла данных)
- Закрыть все (Очистить область вывода данных)
- Выход (Закрыть программу)
- Файл:
-
Для открытия файлов использовать стандартное диалоговое окно выбора файлов (QFileDialog).
-
Парсинг xml-файла должен осуществляться в классе модели, унаследованном от QAbstractItemModel или производного от него. Предоставить конструктор, принимающий имя xml-файла. Для парсинга использовать DOM или SAX.
-
Данные xml-файла должны добавляться в QTreeView, элементами которого являются подтаблицы.
-
Полагать, что структура файла известна и информация в дереве может отличаться от точной структуры xml-файла.
-
Отображение данных должно быть примерно в следующем формате:
- Имя открытого файла без полного пути (например, cafe.xml)
-
Название организации 1
Наименование Значение Административный округ ... Район ... Адрес ... Телефон ... Кол-во посадочных мест ... Геоданные ... -
Название организации 2
Наименование Значение Административный округ ... Район ... Адрес ... Телефон ... Кол-во посадочных мест ... Геоданные ...
-
- Имя открытого файла без полного пути
- Название организации 1 ...
- Реализовать контекстное меню для корневого элемента (т.е. "Имя открытого файла без полного пути") с полем "Сделать файл активным". Текст активного узла сделать жирным. По умолчанию активным считать первый открытый файл. Для дочерних узлов меню срабатывать не должно.
- Предусмотреть поле ввода XQuery-запросов и кнопку «Выполнить». Запрос выполнять к активному файлу.
- Предоставить возможность загрузить запрос в поле из xq-файла (через кнопку «Загрузить» и стандартный диалог выбора файла QFileDialog).
- Результаты выполнения запросов выводить в отдельном окне с аналогичной древовидной структурой.
- Ошибки парсинга обрабатывать выводом окна критических сообщений.