ООП лабораторная работа №6

В библиотеке расширяемого программирования Grom существует класс PropertyTree, который позволяет загружать настройки и другие данные из XML-файлов. В этом классе существуют 4 главных свойства: name, text, items, children.

Следующий пример поясняет сказанное:

<name item1="..." ... itemN="...">
    <child1 .../>
    <child2 .../>
    ...
    <childN .../>
    text
</name>

За счет того, что child-элемент - это объект класса PropertyTree, можно строить в памяти и загружать из XML-файлов любые иерархии.

Однако класс PropertyTree не вполне адекватно представляет XML-файл в памяти. Дело в том, что text в XML-файлах может быть "размазан" среди множества child-элементов. Например:

<name item1="..." ... itemN="...">
    text1
    <child1 .../>
    text2
    <child2 .../>
    text3
    ...
    <childN .../>
    textN
</name>

Если следовать формальному определению XML, то text - это такой же узел, как и child. Кроме того, даже атрибут - item - это child-узел. Т.е. XML должен быть построен следующим образом.

Существует базовый класс - XMLNode. Он представляет собой любой узел XML-дерева. В нем есть список дочерних узлов. Дочерние узлы представляются производными классами:

  • XMLAttribute - item,
  • XMLText - text,
  • XMLElement - child,
  • XMLComment - коментарий,
  • XMLCData - любые данные в формате ASCII,
  • XMLInstruction - указание кодировки/схемы.

Необходимо изучить класс PropertyTree в библиотеке Grom, а также интерфейсы библиотеки MSXML от Microsoft и создать в библиотеке Grom классы, реализующие полную поддержку XML. Написать тестовую программу, которая загружает XML в память, редактирует его и сохраняет на диск. Проверить правильность работы собственных классов с помощью классов MSXML. Таким образом, студенты ознакомятся с концепциями библиотеки Grom и одновременно изучат формат XML.

Переработать классы задания так, чтобы их можно было использовать из программ, написанных на других языках программирования. Для этого воспользоваться понятием интерфейса. Допускается применение языка C++/CLI (это позволит воспользоваться классами на платформе .NET).