Trabajo con XML en C++: bibliotecas, análisis y creación de documentos XML

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations