Com analitzar XML en C ++

How Parse Xml C



En aquest article, analitzarem com analitzar XML en llenguatge de programació C ++. Veurem diversos exemples de treball per entendre el mecanisme d’anàlisi XML a C ++.

Què és XML?

XML és un llenguatge de marques i s’utilitza principalment per emmagatzemar i transferir dades de manera organitzada. XML significa eXtensible Markup Language. És molt similar a HTML. L'XML està completament enfocat a emmagatzemar i transferir les dades, mentre que l'HTML s'utilitza per mostrar les dades al navegador.







Un fitxer XML de mostra / sintaxi XML

Aquí teniu un exemple de fitxer XML:



versió='1.0' codificació='utf-8'?>

>

tipus_estudiant='Temps parcial'>

>Tom>

>

tipus_estudiant='A temps complet'>

>Drake>

>

>

A diferència de l’HTML, és un llenguatge de marques orientat a etiquetes i podem definir la nostra pròpia etiqueta en un fitxer XML. A l'exemple anterior, tenim diverses etiquetes definides per l'usuari, com ara. Cada etiqueta tindrà l'etiqueta final corresponent. és l'etiqueta final de. Podem definir tantes etiquetes definides per l'usuari com vulguem per organitzar les dades.



Anàlisi de biblioteques en C ++:

Hi ha diverses biblioteques per analitzar dades XML en la majoria dels llenguatges de programació d'alt nivell. C ++ no és una excepció. Aquí teniu les biblioteques C ++ més populars per analitzar dades XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Com el seu nom indica, RapidXML se centra principalment en la velocitat i és una biblioteca d’anàlisi d’estil DOM. PugiXML admet la conversió Unicode. Podeu utilitzar PugiXML si voleu convertir el document UTF-16 a UTF-8. TinyXML és una versió mínima per analitzar les dades XML i no és tan ràpida en comparació amb les dues anteriors. Si només voleu fer la feina i no us importa la velocitat, podeu triar TinyXML.

Exemples
Ara tenim una comprensió bàsica de les biblioteques d’anàlisi XML i XML a C ++. Vegem ara un parell d'exemples per analitzar el fitxer XML a C ++:



  • Exemple-1: analitzeu XML en C ++ mitjançant RapidXML
  • Exemple-2: analitzeu XML en C ++ mitjançant PugiXML
  • Exemple-3: analitzeu XML a C ++ mitjançant TinyXML

En cadascun d’aquests exemples, utilitzarem les biblioteques respectives per analitzar un fitxer XML de mostra.

Exemple-1: analitzeu XML en C ++ mitjançant RapidXML

En aquest programa d’exemple, demostrarem com analitzar xml mitjançant la biblioteca RapidXML a C ++. Aquí teniu el fitxer XML d’entrada (sample.xml):

versió='1.0' codificació='utf-8'?>

>

tipus_estudiant='Temps parcial'>

>Joan>

>

tipus_estudiant='A temps complet'>

>siguin>

>

tipus_estudiant='Temps parcial'>

>Sarah>

>

>

El nostre objectiu aquí és analitzar el fitxer XML anterior mitjançant C ++. Aquí teniu el programa C ++ per analitzar dades XML mitjançant RapidXML. Podeu descarregar la biblioteca RapidXML des de Aquí .

#incloure
#incloure
#incloure
#include 'rapidxml.hpp'

utilitzant espai de nomshores;
utilitzant espai de nomsrapidxml;


xml_documentdoc
xml_node *node_arrel= NUL;

intprincipal(buit)
{
cost << ' nAnalitzant les dades dels meus estudiants (sample.xml) ..... ' <<endl;

// Llegiu el fitxer sample.xml
ifstream el fitxer('sample.xml');
vector<char>memòria intermèdia((istreambuf_iterator<char>(l'arxiu)), istreambuf_iterator<char>());
memòria intermèdia.fer retrocedir(' 0');

// Analitzeu la memòria intermèdia
doc.analitzar<0>(&memòria intermèdia[0]);

// Esbrineu el node arrel
node_arrel=doc.primer_node('MyStudentsData');

// Iterar sobre els nodes dels estudiants
per (xml_node *node_estudiant=node_arrel->primer_node('Estudiant');node_estudiant;node_estudiant=node_estudiant->next_sibling())
{
cost << ' nTipus d'estudiant = ' <<node_estudiant->primer_atribut('tipus_estudiant')->valor();
cost <<endl;

// Interactua sobre els noms dels estudiants
per(xml_node *nom_estudiant_node=node_estudiant->primer_node('Nom');nom_estudiant_node;nom_estudiant_node=nom_estudiant_node->next_sibling())
{
cost << 'Nom de l'estudiant =' <<nom_estudiant_node->valor();
cost <<endl;
}
cost <<endl;
}

tornar 0;
}

Exemple-2: analitzeu XML en C ++ mitjançant PugiXML

En aquest programa d’exemple, demostrarem com analitzar xml mitjançant la biblioteca PugiXML a C ++. Aquí teniu el fitxer XML d’entrada (sample.xml):

versió='1.0' codificació='UTF-8' autònom='No' ?>

FormatVersion='1'>

>

Nom='John' Tipus='Temps parcial'>

>

Nom='Sean' Tipus='A temps complet'>

>

Nom='Sarah' Tipus='Temps parcial'>

>

>

>

En aquest programa d’exemple, demostrarem com analitzar xml mitjançant la biblioteca pugixml a C ++. Podeu descarregar la biblioteca PugiXML des de Aquí .

#incloure
#include 'pugixml.hpp'

utilitzant espai de nomshores;
utilitzant espai de nomspugi;

intprincipal()
{
cost << ' nAnalitzant les dades dels empleats (sample.xml) ..... n n';


document xml_document;

// carregueu el fitxer XML
si (!doc.fitxer_càrrega('sample.xml')) tornar -1;

eines xml_node=doc.nen('EmployeesData').nen('Empleats');


per (xml_node_iterator=eines.començar();això!=eines.final(); ++això)
{
cost << 'Empleats:';

per (xml_attribute_iterator ait=això->atributs_començar();pertinença!=això->atributs_fina(); ++pertinença)
{
cost << '' <<pertinença->nom() << '=' <<pertinença->valor();
}

cost <<endl;
}

cost <<endl;

tornar 0;

}

Exemple-3: analitzeu XML a C ++ mitjançant TinyXML

En aquest programa d’exemple, demostrarem com analitzar xml mitjançant la biblioteca TinyXML a C ++. Aquí teniu el fitxer XML d’entrada (sample.xml):

versió='1.0' codificació='utf-8'?>

>

>Joan>

>siguin>

>Sarah>

>

En aquest programa d’exemple, demostrarem com analitzar xml mitjançant la biblioteca TinyXML a C ++. Podeu descarregar la biblioteca TinyXML des de Aquí .

#incloure
#incloure
#incloure
#include 'tinyxml2.cpp'

utilitzant espai de nomshores;
utilitzant espai de nomstinyxml2;


intprincipal(buit)
{
cost << ' nAnalitzant les dades dels meus estudiants (sample.xml) ..... ' <<endl;

// Llegiu el fitxer sample.xml
Document XMLDocument;
doc.LoadFile( 'sample.xml' );

const char*títol=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Estudiant' )->GetText();
printf( 'Nom de l'estudiant:% s n', títol);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Estudiant' )->FirstChild()->Enviar un missatge();
títol=textNode->Valor();
printf( 'Nom de l'estudiant:% s n', títol);


tornar 0;
}

Conclusió

En aquest article, hem debatut breument XML i va examinar tres exemples diferents de com analitzar XML en C ++. TinyXML és una biblioteca minimalista per analitzar dades XML. La majoria dels programadors utilitzen principalment RapidXML o PugiXML per analitzar dades XML.