Trabajo con XML en C++: resumen de bibliotecas para el análisis y creación de documentos XML
XML (Extensible Markup Language) sigue siendo un formato popular para almacenar y transmitir datos estructurados, especialmente en archivos de configuración, servicios web (SOAP, XML-RPC) e intercambio de datos entre sistemas. En C++ no hay soporte integrado para XML (excepto el obsoleto MSXML), por lo que los desarrolladores recurren a bibliotecas de terceros. En este artículo, veremos las tres bibliotecas más populares y ligeras para trabajar con XML en C++: TinyXML-2, PugiXML y RapidXML. Aprenderá cómo instalar cada una, cómo analizar y crear documentos XML, y compararemos su rendimiento y facilidad de uso.
1. TinyXML-2
TinyXML-2 es una biblioteca simple y minimalista que consta de solo dos archivos (tinyxml2.h y tinyxml2.cpp). Es ideal para proyectos pequeños donde no se requiere un alto rendimiento, pero la simplicidad de integración es importante. La biblioteca tiene licencia Zlib, lo que permite su uso libre en proyectos comerciales.
Instalación
Copie los archivos tinyxml2.h y tinyxml2.cpp del repositorio oficial en su proyecto e inclúyalos. No se requieren dependencias adicionales.
Ejemplo: lectura de 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;}Ejemplo: creación de 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 es una biblioteca más rápida y funcional que TinyXML-2. Soporta XPath, trabajo con codificaciones UTF-8/16 y tiene una API conveniente. PugiXML se utiliza a menudo en proyectos donde se requiere un equilibrio entre velocidad y facilidad de uso. Se distribuye bajo la licencia MIT.
Instalación
Descargue los archivos fuente desde GitHub y agregue pugixml.cpp y pugixml.hpp al proyecto. Para usar XPath, agregue PUGIXML_HAS_XPATH en las definiciones del preprocesador.
Ejemplo: lectura de XML con 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;}Ejemplo: creación de 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 es la biblioteca más rápida para el análisis de XML en C++. Funciona in-place (modifica el original
También en la biblioteca
Planificador de tareas en PHP: biblioteca cron‑expression para horarios flexibles
Trabajo con Kafka en Swift (iOS/macOS): bibliotecas, clientes y ejemplos
Marten para C# (.NET): guía completa con ejemplos prácticos
Jackson para Java: guía completa con ejemplos