Travailler avec XML en C++ : aperçu des bibliothèques pour l'analyse et la création de documents XML
XML (Extensible Markup Language) reste un format populaire pour le stockage et la transmission de données structurées, en particulier dans les fichiers de configuration, les services web (SOAP, XML-RPC) et l'échange de données entre systèmes. C++ ne dispose pas de support XML intégré (à l'exception de MSXML, qui est obsolète), c'est pourquoi les développeurs se tournent vers des bibliothèques tierces. Dans cet article, nous examinerons les trois bibliothèques les plus populaires et légères pour travailler avec XML en C++ : TinyXML-2, PugiXML et RapidXML. Vous apprendrez comment installer chacune d'elles, comment analyser et créer des documents XML, et nous comparerons leurs performances et leur facilité d'utilisation.
1. TinyXML-2
TinyXML-2 est une bibliothèque simple et minimaliste composée de seulement deux fichiers (tinyxml2.h et tinyxml2.cpp). Elle est idéale pour les petits projets où une haute performance n'est pas requise, mais où la simplicité d'intégration est importante. La bibliothèque est sous licence Zlib, ce qui permet de l'utiliser librement dans des projets commerciaux.
Installation
Copiez les fichiers tinyxml2.h et tinyxml2.cpp depuis le dépôt officiel dans votre projet et incluez-les. Aucune dépendance supplémentaire n'est requise.
Exemple : lecture XML
#include "tinyxml2.h"#include <iostream>
int main() { tinyxml2::XMLDocument doc; doc.LoadFile("config.xml");
tinyxml2::XMLElement* root = doc.RootElement(); if (root) { const char* value = root->FirstChildElement("setting")->GetText(); std::cout << "Setting: " << value << std::endl; } return 0;}Exemple : création XML
#include "tinyxml2.h"
int main() { tinyxml2::XMLDocument doc; tinyxml2::XMLDeclaration* decl = doc.NewDeclaration(); doc.InsertFirstChild(decl);
tinyxml2::XMLElement* root = doc.NewElement("root"); root->SetAttribute("version", "1.0"); doc.InsertEndChild(root);
tinyxml2::XMLElement* child = doc.NewElement("item"); child->SetText("Hello, XML!"); root->InsertEndChild(child);
doc.SaveFile("output.xml"); return 0;}2. PugiXML
PugiXML est une bibliothèque plus rapide et plus fonctionnelle que TinyXML-2. Elle prend en charge XPath, le travail avec les encodages UTF-8/16 et dispose d'une API pratique. PugiXML est souvent utilisée dans les projets où un équilibre entre vitesse et commodité est nécessaire. Elle est distribuée sous licence MIT.
Installation
Téléchargez les sources depuis GitHub et ajoutez pugixml.cpp et pugixml.hpp à votre projet. Pour utiliser XPath, ajoutez PUGIXML_HAS_XPATH dans les définitions du préprocesseur.
Exemple : lecture XML avec XPath
#include "pugixml.hpp"#include <iostream>
int main() { pugi::xml_document doc; doc.load_file("data.xml");
pugi::xpath_node result = doc.select_node("//item[@id='1']"); if (result) { std::cout << "Found: " << result.node().child_value() << std::endl; } return 0;}Exemple : création XML
#include "pugixml.hpp"
int main() { pugi::xml_document doc; pugi::xml_node root = doc.append_child("configuration"); root.append_attribute("version") = "2.0";
pugi::xml_node param = root.append_child("param"); param.append_attribute("name") = "timeout"; param.text().set("30");
doc.save_file("config.xml"); return 0;}3. RapidXML
RapidXML est la bibliothèque la plus rapide pour l'analyse XML en C++. Elle fonctionne in-place (modifie la source
Aussi dans la bibliothèque
Travailler avec Kafka en PHP : bibliothèques, connexion et exemples de code
Client Elasticsearch pour C++ : elasticlient et guide complet
Travailler avec Excel en Kotlin : bibliothèques Apache POI et Apache POI pour Kotlin
Client HTTP pour Swift (iOS/macOS) : top bibliothèques 2024
Programmation réactive en Java : la bibliothèque Reactor