Cómo analizar XML en C ++

Cómo analizar XML en C ++

En este artículo, vamos a discutir cómo analizar XML en el lenguaje de programación de C ++. Veremos varios ejemplos de trabajo para comprender el mecanismo de análisis XML en C++.

Que es xml?

XML es un lenguaje de marcado y se utiliza principalmente para almacenar y transferir datos de manera organizada. XML significa lenguaje de marcado extensible. Es muy similar a HTML. El XML se centra completamente en almacenar y transferir los datos, mientras que el HTML se utiliza para mostrar los datos en el navegador.

Una muestra de archivo XML/sintaxis XML

Aquí hay un archivo XML de muestra:




Tomás


Pato

A diferencia de HTML, es un lenguaje de marcado orientado a la etiqueta, y podemos definir nuestra propia etiqueta en un archivo XML. En el ejemplo anterior, tenemos varias etiquetas definidas por el usuario como "". Cada etiqueta tendrá la etiqueta final correspondiente. "" Es la etiqueta final para "". Podemos definir tantas etiquetas definidas por el usuario como queramos organizar los datos.

Analizando bibliotecas en C ++:

Hay varias bibliotecas para analizar los datos XML en la mayoría de los lenguajes de programación de alto nivel. C ++ no es una excepción. Estas son las bibliotecas C ++ más populares para analizar los datos XML:

  1. Rápido
  2. Pugixml
  3. Tinyxml

Como su nombre indica, el RapidXML se centra principalmente en la velocidad, y es una biblioteca de análisis de estilo DOM. Pugixml admite la conversión de Unicode. Es posible que desee usar Pugixml si desea convertir UTF-16 DOC a UTF-8. Tinyxml es una versión mínima desnuda para analizar los datos XML y no tan rápido en comparación con los dos anteriores. Si solo desea hacer el trabajo y no le importa la velocidad, puede elegir tinyxml.

Ejemplos
Ahora, tenemos una comprensión básica de las bibliotecas de análisis XML y XML en C++. Veamos ahora un par de ejemplos para analizar el archivo XML en C ++:

  • Ejemplo-1: analizar XML en C ++ usando RapidXML
  • Ejemplo-2: Pase XML en C ++ usando Pugixml
  • Ejemplo-3: Pase XML en C ++ usando tinyxml

En cada uno de estos ejemplos, utilizaremos las bibliotecas respectivas para analizar un archivo XML de muestra.

Ejemplo-1: analizar XML en C ++ usando RapidXML

En este programa de ejemplo, demostraremos cómo analizar XML utilizando la biblioteca Rapidxml en C++. Aquí está el archivo xml de entrada (muestra.xml):




John


Sean


Sarah

Nuestro objetivo aquí es analizar el archivo XML anterior usando C++. Aquí está el programa C ++ para analizar los datos XML utilizando RapidXML. Puede descargar la biblioteca Rapidxml desde aquí.

#incluir
#incluir
#incluir
#Include "Rapidxml.HPP "
usando el espacio de nombres STD;
usando el espacio de nombres Rapidxml;
xml_document doc
xml_node * root_node = null;
int main (nulo)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Lee la muestra.archivo XML
ifstream thefile ("muestra.xml ");
vector buffer ((istreamBuf_iterator(theFile)), istreamBuf_iterator());
buffer.push_back ('\ 0');
// analiza el búfer
doc.analizar gramaticalmente<0>(& buffer [0]);
// Descubre el nodo raíz
root_node = doc.first_node ("mystudentsdata");
// iterar sobre los nodos estudiantiles
for (xml_node * student_node = root_node-> first_node ("estudiante");
student_node; student_node = student_node-> next_sibling ())

cout << "\nStudent Type = " <<
student_node-> first_attribute ("student_type")-> value ();
cout << endl;
// Interate sobre los nombres de los estudiantes
for (xml_node * student_name_node = student_node-> first_node ("name");
student_name_node; student_name_node = student_name_node-> next_sibling ())

cout << "Student Name = " << student_name_node->valor();
cout << endl;

cout << endl;

regresar 0;

Ejemplo-2: Pase XML en C ++ usando Pugixml

En este programa de ejemplo, demostraremos cómo analizar XML usando la biblioteca Pugixml en C++. Aquí está el archivo xml de entrada (muestra.xml):











En este programa de ejemplo, demostraremos cómo analizar XML usando la biblioteca Pugixml en C++. Puedes descargar la biblioteca Pugixml desde aquí.

#incluir
#include "Pugixml.HPP "
usando el espacio de nombres STD;
usando el espacio de nombres Pugi;
int main ()

cout << "\nParsing employees data (sample.xml)… \n\n";
xml_document doc;
// Cargue el archivo XML
si (!doc.load_file ("muestra.xml ")) return -1;
xml_node herramientas = doc.Niño ("Data de empleados").niño ("empleados");
para (xml_node_iterator it = herramientas.comenzar(); él != herramientas.fin(); ++ it)

cout << "Employees:";
for (xml_attribute_iterator ait = it-> atributes_begin ();
AIT != it-> atributes_end (); ++ ait)

cout << " " << ait->nombre() <<
"=" << ait->valor();

cout << endl;

cout << endl;
regresar 0;

Ejemplo-3: Pase XML en C ++ usando tinyxml

En este programa de ejemplo, demostraremos cómo analizar XML usando la biblioteca tinyxml en c++. Aquí está el archivo xml de entrada (muestra.xml):



John
Sean
Sarah

En este programa de ejemplo, demostraremos cómo analizar XML usando la biblioteca tinyxml en c++. Puede descargar la biblioteca tinyxml desde aquí.

#incluir
#incluir
#incluir
#include "tinyxml2.CPP "
usando el espacio de nombres STD;
usando el espacio de nombres tinyxml2;
int main (nulo)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Lee la muestra.archivo XML
XmlDocument doc;
doc.LoadFile ("Muestra.xml ");
const char* title = doc.FirstChildelement ("mystudentsdata")-> firstChildelement ("estudiante")-> getText ();
printf ("Nombre del estudiante: %s \ n", título);
XmlText* textNode = doc.LastChildElement ("mystudentsdata")-> lastchildelement ("estudiante")-> firstChild ()-> totext ();
title = textNode-> value ();
printf ("Nombre del estudiante: %s \ n", título);
regresar 0;

Conclusión

En este artículo, hemos discutido brevemente XML y buscamos tres ejemplos diferentes de cómo analizar XML en C++. Tinyxml es una biblioteca minimalista para analizar datos XML. La mayoría de los programadores utilizan principalmente RapidXML o Pugixml para analizar los datos XML.