Trabalho com XML em C++: bibliotecas, parsing e criação de documentos XML

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com XML em C++: visão geral das bibliotecas para parsing e criação de documentos XML



XML (Extensible Markup Language) continua sendo um formato popular para armazenar e transmitir dados estruturados, especialmente em arquivos de configuração, serviços web (SOAP, XML-RPC) e troca de dados entre sistemas. Em C++, não há suporte nativo a XML (exceto pelo obsoleto MSXML), portanto, os desenvolvedores recorrem a bibliotecas de terceiros. Neste artigo, abordaremos as três bibliotecas mais populares e leves para trabalhar com XML em C++: TinyXML-2, PugiXML e RapidXML. Você aprenderá como instalar cada uma delas, como fazer parsing e criar documentos XML, além de comparar seu desempenho e facilidade de uso.



1. TinyXML-2



TinyXML-2 é uma biblioteca simples e minimalista, composta por apenas dois arquivos (tinyxml2.h e tinyxml2.cpp). É ideal para projetos pequenos, onde não é necessário alto desempenho, mas a simplicidade de integração é importante. A biblioteca é licenciada sob Zlib, permitindo seu uso livre em projetos comerciais.



Instalação

Copie os arquivos tinyxml2.h e tinyxml2.cpp do repositório oficial para o seu projeto e inclua-os. Nenhuma dependência adicional é necessária.



Exemplo: leitura 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;}


Exemplo: criação 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 é uma biblioteca mais rápida e funcional que o TinyXML-2. Ela suporta XPath, trabalha com codificações UTF-8/16 e possui uma API conveniente. O PugiXML é frequentemente usado em projetos que exigem um equilíbrio entre velocidade e facilidade de uso. É distribuído sob a licença MIT.



Instalação

Baixe os arquivos fonte do GitHub e adicione pugixml.cpp e pugixml.hpp ao projeto. Para usar XPath, adicione PUGIXML_HAS_XPATH nas definições do pré-processador.



Exemplo: leitura de XML com 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;}


Exemplo: criação 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 é a biblioteca mais rápida para parsing de XML em C++. Ela trabalha in-place (modifica o original

Recommendations