Работа с файлами в формате XML с помощью библиотеки TinyXML (С++)


Библиотека 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;
 
Следует учесть, что файл должен быть валидным, т. е. не содержать ошибок. Например все теги должны быть правильным образом закрыты (<body /> или <body></body>) и так далее.
После открытия файла мы находимся в его корне, поэтому элемент <level> будет являться первым дочерним элементом всего файла. Доступ к нему мы можем получить так:
 
TiXmlElement *xml_level = 0;
xml_level = xml_file->FirstChildElement("level");
 
Функция FirstChildElement(имя_элемента) возвращает указатель на первый дочерний элемент объекта xml_file. Элемент <level> имеет дочерний элемент <entity>, поэтому доступ к нему мы получим уже через xml_level:
 
TiXmlElement *xml_entity = 0;
xml_entity = xml_level->FirstChildElement("entity");
 
Поскольку элементов <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/.


Добавить комментарий

Логин:
Пароль:
Проверочное число: