Введение в XML в C++
Текстовый формат структурированных данных - это XML.
Его часто передают между сервисами или сохраняют в файле. Разметка похожа на HTML, но имена тегов и атрибутов задает автор схемы.
Документ начинается с объявления версии и содержит один корневой тег, внутри которого лежит все содержимое. Каждый тег может иметь атрибуты в угловых скобках и текст между открывающим и закрывающим именем:
<?xml version="1.0"?>
<root>
<city code="spb">Saint Petersburg</city>
</root>
Здесь корень - root, внутри тег
city с атрибутом code
и текстом названия. В C++ такой текст
удобно разбирать библиотекой pugixml:
заголовок pugixml.hpp, тип
pugi::xml_document и загрузка
строки через load_string.
Короткий разбор той же строки в программе выглядит так:
#include <iostream>
#include <string>
#include <pugixml.hpp>
int main() {
std::string xml = R"(<?xml version="1.0"?>
<root>
<city code="spb">Saint Petersburg</city>
</root>)";
pugi::xml_document doc;
doc.load_string(xml.c_str());
pugi::xml_node root = doc.child("root");
std::cout << root.name() << "\n";
pugi::xml_node city = root.child("city");
std::cout << city.attribute("code").as_string() << "\n";
std::cout << city.text().as_string() << "\n";
return 0;
}
Метод child находит первый
дочерний узел по имени, attribute
открывает атрибут, а text
возвращает текст внутри тега. Дальнейшие
уроки опираются на эту цепочку.