Come analizzare XML in C++

How Parse Xml C



In questo articolo, discuteremo come analizzare XML nel linguaggio di programmazione C++. Vedremo diversi esempi di lavoro per comprendere il meccanismo di analisi XML in C++.

Che cos'è l'XML?

XML è un linguaggio di markup e viene utilizzato principalmente per archiviare e trasferire dati in modo organizzato. XML sta per eXtensible Markup Language. È molto simile all'HTML. L'XML è completamente focalizzato sull'archiviazione e il trasferimento dei dati, mentre l'HTML viene utilizzato per visualizzare i dati sul browser.







Un esempio di file XML/sintassi XML

Ecco un file XML di esempio:



versione='1.0' codifica='utf-8'?>

>

tipo_studente='Part time'>

>Tom>

>

tipo_studente='Tempo pieno'>

>Drake>

>

>

A differenza dell'HTML, è un linguaggio di markup orientato ai tag e possiamo definire il nostro tag in un file XML. Nell'esempio sopra, abbiamo diversi tag definiti dall'utente come . Ogni tag avrà il tag finale corrispondente. è il tag finale per . Possiamo definire tanti tag definiti dall'utente quanti vogliamo organizzare i dati.



Analisi delle librerie in C++:

Esistono varie librerie per analizzare i dati XML nella maggior parte dei linguaggi di programmazione di alto livello. C++ non fa eccezione. Ecco le librerie C++ più popolari per analizzare i dati XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Come suggerisce il nome, RapidXML è principalmente focalizzato sulla velocità ed è una libreria di analisi in stile DOM. PugiXML supporta la conversione Unicode. Potresti voler usare PugiXML se vuoi convertire il documento UTF-16 in UTF-8. TinyXML è una versione minima per analizzare i dati XML e non così veloce rispetto alle due precedenti. Se vuoi solo portare a termine il lavoro e non ti interessa la velocità, puoi scegliere TinyXML.

Esempi
Ora abbiamo una conoscenza di base delle librerie di analisi XML e XML in C++. Diamo ora un'occhiata a un paio di esempi per analizzare il file xml in C++:



  • Esempio 1: analizza XML in C++ usando RapidXML
  • Esempio 2: analizzare XML in C++ utilizzando PugiXML
  • Esempio 3: analizza XML in C++ usando TinyXML

In ciascuno di questi esempi, utilizzeremo le rispettive librerie per analizzare un file XML di esempio.

Esempio 1: analizza XML in C++ usando RapidXML

In questo programma di esempio, dimostreremo come analizzare xml utilizzando la libreria RapidXML in C++. Ecco il file XML di input (sample.xml):

versione='1.0' codifica='utf-8'?>

>

tipo_studente='Part time'>

>John>

>

tipo_studente='Tempo pieno'>

>Sean>

>

tipo_studente='Part time'>

>Sara>

>

>

Il nostro obiettivo qui è analizzare il file XML di cui sopra usando C++. Ecco il programma C++ per analizzare i dati XML utilizzando RapidXML. Puoi scaricare la libreria RapidXML da Qui .

#includere
#includere
#includere
#include 'rapidxml.hpp'

usando spazio dei nomiore;
usando spazio dei nomirapidxml;


xml_documentdocumento
xml_node *root_node= NULLO;

intprincipale(vuoto)
{
costo << ' Analisi dei dati dei miei studenti (sample.xml).....' <<fine;

// Leggi il file sample.xml
ifstream theFile('campione.xml');
vettore<char>respingente((istreambuf_iterator<char>(il file)), istreambuf_iterator<char>());
respingente.respingere(' 0');

// Analizza il buffer
doc.analizzare<0>(&respingente[0]);

// Scopri il nodo radice
root_node=doc.primo_nodo('Dati MieiStudenti');

// Itera sui nodi degli studenti
per (xml_node *studente_nodo=root_node->primo_nodo('Alunno');studente_nodo;studente_nodo=studente_nodo->prossimo_fratello())
{
costo << ' Tipo di studente = ' <<studente_nodo->primo_attributo('tipo_studente')->valore();
costo <<fine;

// Interagisci sui nomi degli studenti
per(xml_node *student_name_node=studente_nodo->primo_nodo('Nome');student_name_node;student_name_node=student_name_node->prossimo_fratello())
{
costo << 'Nome studente = ' <<student_name_node->valore();
costo <<fine;
}
costo <<fine;
}

Restituzione 0;
}

Esempio 2: analizzare XML in C++ utilizzando PugiXML

In questo programma di esempio, dimostreremo come analizzare xml usando la libreria PugiXML in C++. Ecco il file XML di input (sample.xml):

versione='1.0' codifica='UTF-8' indipendente, autonomo='no' ?>

FormatoVersione='1'>

>

Nome='John' Tipo='Part time'>

>

Nome='Sean' Tipo='Tempo pieno'>

>

Nome='Sara' Tipo='Part time'>

>

>

>

In questo programma di esempio, dimostreremo come analizzare xml usando la libreria pugixml in C++. Puoi scaricare la libreria PugiXML da Qui .

#includere
#include 'pugixml.hpp'

usando spazio dei nomiore;
usando spazio dei nomipugi;

intprincipale()
{
costo << ' Analisi dei dati dei dipendenti (sample.xml)..... ';


documento xml_document;

// carica il file XML
Se (!doc.load_file('campione.xml')) Restituzione -1;

strumenti xml_node=doc.bambino('Dati Dipendenti').bambino('Dipendenti');


per (xml_node_iterator it=utensili.inizio();esso!=utensili.fine(); ++esso)
{
costo << 'Dipendenti:';

per (xml_attribute_iterator ait=esso->attributi_inizio();appartenente!=esso->attributi_fine(); ++appartenente)
{
costo << '' <<appartenente->nome() << '=' <<appartenente->valore();
}

costo <<fine;
}

costo <<fine;

Restituzione 0;

}

Esempio 3: analizza XML in C++ usando TinyXML

In questo programma di esempio, dimostreremo come analizzare xml usando la libreria TinyXML in C++. Ecco il file XML di input (sample.xml):

versione='1.0' codifica='utf-8'?>

>

>John>

>Sean>

>Sara>

>

In questo programma di esempio, dimostreremo come analizzare xml usando la libreria TinyXML in C++. Puoi scaricare la libreria TinyXML da Qui .

#includere
#includere
#includere
#include 'tinyxml2.cpp'

usando spazio dei nomiore;
usando spazio dei nomitinyxml2;


intprincipale(vuoto)
{
costo << ' Analisi dei dati dei miei studenti (sample.xml).....' <<fine;

// Leggi il file sample.xml
XMLDocument doc;
doc.Carica file( 'campione.xml' );

cost char*titolo=doc.FirstChildElement( 'Dati MieiStudenti' )->FirstChildElement( 'Alunno' )->Ottieni testo();
printf( 'Nome studente: %s ', titolo);


XMLText*textNode=doc.LastChildElement( 'Dati MieiStudenti' )->LastChildElement( 'Alunno' )->Primogenito()->ToText();
titolo=textNode->Valore();
printf( 'Nome studente: %s ', titolo);


Restituzione 0;
}

Conclusione

In questo articolo, abbiamo discusso brevemente XML e ho esaminato tre diversi esempi di come analizzare XML in C++. TinyXML è una libreria minimalista per l'analisi dei dati XML. La maggior parte dei programmatori utilizza principalmente RapidXML o PugiXML per analizzare i dati XML.