C/C++: Работа с файлами в формате XML с помощью библиотеки TinyXML

Автор simplex  // 18.01.2012
Библиотека TinyXML предоставляет программисту очень удобный способ работы с XML. Для примера возьмем такой фрагмент XML-файла:
<level name="Demo Level 1">
<entity class="Car" pos="300,250,300">
<body mass="20" />
</entity>
<entity class="Robot" pos="100,250,100">
</level>

Теперь фрагмент кода на С++, который иллюстрирует работу с TinyXML (предварительно подключив заголовочный файл библиотеки директивой "#include" и внеся строку "tinyxml.lib" в конфигурацию линковщика).
 //Открываем XML-файл:
TiXmlDocument *xml_file = new TiXmlDocument("путь_к_файлу");
if(!xml_file->LoadFile())
return false;

Следует учесть, что файл должен быть валидным, т. е. не содержать ошибок. Например все теги должны быть правильным образом закрыты ( или ) и так далее.
После открытия файла мы находимся в его корне, поэтому элемент будет являться первым дочерним элементом всего файла. Доступ к нему мы можем получить так:
 TiXmlElement *xml_level = 0;
xml_level = xml_file->FirstChildElement("level");

Функция FirstChildElement(имя_элемента) возвращает указатель на первый дочерний элемент объекта xml_file. Элемент имеет дочерний элемент , поэтому доступ к нему мы получим уже через xml_level:
TiXmlElement *xml_entity = 0;
xml_entity = xml_level->FirstChildElement("entity");

Поскольку элементов у нас несколько, мы можем циклически пройтись по ним используя функцию NextSiblingElement(имя_элемента), которая возвращает указатель на соседний с текущим элемент XML-файла:
while(xml_entity != NULL)
{
//выполняем различные действия
//...
 
xml_entity = xml_entity->NextSiblingElement("entity");
}

Теперь, когда мы знаем как пройтись по всем элементам XML-файла остается только один важный и нужный момент - атрибуты элемента. Получить их значение (типа const char *) можно так:
//значение атрибута class элемента <entity>
xml_entity->Attribute("class");
//значение атрибута name элемента <level>
xml_level->Attribute("name");

Скачать библиотеку и документацию к ней можно на сайте http://www.grinninglizard.com/tinyxml/.


Share this:


Комментарии (0) Добавить
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.