So analysieren Sie XML in C++

How Parse Xml C

In diesem Artikel werden wir diskutieren, wie XML in der Programmiersprache C++ analysiert wird. Wir werden mehrere Arbeitsbeispiele sehen, um den XML-Parsing-Mechanismus in C++ zu verstehen.

Was ist XML?

XML ist eine Auszeichnungssprache und wird hauptsächlich zum organisierten Speichern und Übertragen von Daten verwendet. XML steht für eXtensible Markup Language. Es ist HTML sehr ähnlich. Das XML konzentriert sich vollständig auf das Speichern und Übertragen der Daten, während das HTML für die Anzeige der Daten im Browser verwendet wird.



Ein Beispiel für eine XML-Datei/XML-Syntax

Hier ist eine XML-Beispieldatei:



Ausführung='1.0' Codierung='utf-8'?>

>

student_type='Teilzeit'>

>Tom>

>

student_type='Vollzeit'>

>Erpel>

>

>

Im Gegensatz zu HTML handelt es sich um eine Tag-orientierte Auszeichnungssprache, und wir können unser eigenes Tag in einer XML-Datei definieren. Im obigen Beispiel haben wir mehrere benutzerdefinierte Tags wie . Jedes Tag hat das entsprechende End-Tag. ist das End-Tag für . Wir können so viele benutzerdefinierte Tags definieren, wie wir die Daten organisieren möchten.



Parsen von Bibliotheken in C++:

Es gibt verschiedene Bibliotheken zum Parsen von XML-Daten in den meisten höheren Programmiersprachen. C++ ist keine Ausnahme. Hier sind die beliebtesten C++-Bibliotheken zum Parsen von XML-Daten:

  1. RapidXML
  2. PugiXML
  3. TinyXML

Wie der Name schon sagt, konzentriert sich RapidXML hauptsächlich auf Geschwindigkeit und ist eine Parsing-Bibliothek im DOM-Stil. PugiXML unterstützt die Unicode-Konvertierung. Sie können PugiXML verwenden, wenn Sie UTF-16-Dokumente in UTF-8 konvertieren möchten. TinyXML ist eine minimale Version zum Parsen von XML-Daten und nicht so schnell wie die beiden vorherigen. Wenn Sie nur die Arbeit erledigen möchten und sich nicht um die Geschwindigkeit kümmern, können Sie TinyXML wählen.

Beispiele
Jetzt haben wir ein grundlegendes Verständnis von XML und XML-Parsing-Bibliotheken in C++. Sehen wir uns nun ein paar Beispiele zum Parsen einer XML-Datei in C++ an:



  • Beispiel-1: Parsen von XML in C++ mit RapidXML
  • Beispiel-2: Parsen von XML in C++ mit PugiXML
  • Beispiel-3: Parsen von XML in C++ mit TinyXML

In jedem dieser Beispiele verwenden wir die entsprechenden Bibliotheken, um eine XML-Beispieldatei zu analysieren.

Beispiel-1: Parsen von XML in C++ mit RapidXML

In diesem Beispielprogramm zeigen wir, wie man XML mit der RapidXML-Bibliothek in C++ parst. Hier ist die XML-Eingabedatei (sample.xml):

Ausführung='1.0' Codierung='utf-8'?>

>

student_type='Teilzeit'>

>John>

>

student_type='Vollzeit'>

>Sean>

>

student_type='Teilzeit'>

>Sarah>

>

>

Unser Ziel hier ist es, die obige XML-Datei mit C++ zu parsen. Hier ist das C++-Programm zum Parsen von XML-Daten mit RapidXML. Sie können die RapidXML-Bibliothek herunterladen von Hier .

#enthalten
#enthalten
#enthalten
#include 'rapidxml.hpp'

mit Namensraumstd;
mit Namensraumrapidxml;


xml_documentdoc
xml_node *Wurzelknoten= NULL;

inthauptsächlich(Leere)
{
Kosten << ' Parsing meiner Schülerdaten (sample.xml) ....' <<endl;

// Lesen Sie die Datei sample.xml
ifstream theFile('sample.xml');
Vektor<verkohlen>Puffer((istreambuf_iterator<verkohlen>(die Datei)), istreambuf_iterator<verkohlen>());
Puffer.push_back(' 0');

// Parsen des Puffers
doc.analysieren<0>(&Puffer[0]);

// Finde den Wurzelknoten heraus
Wurzelknoten=doc.erster_knoten('MyStudentsData');

// Iteriere über die Schülerknoten
zum (xml_node *student_node=Wurzelknoten->erster_knoten('Student');student_node;student_node=student_node->next_geschwister())
{
Kosten << ' Studententyp = ' <<student_node->erstes_attribut('student_typ')->Wert();
Kosten <<endl;

// Interate über die Schülernamen
zum(xml_node *student_name_node=student_node->erster_knoten('Name');student_name_node;student_name_node=student_name_node->next_geschwister())
{
Kosten << 'Schülername = ' <<student_name_node->Wert();
Kosten <<endl;
}
Kosten <<endl;
}

Rückkehr 0;
}

Beispiel-2: Parsen von XML in C++ mit PugiXML

In diesem Beispielprogramm zeigen wir, wie man XML mit der PugiXML-Bibliothek in C++ analysiert. Hier ist die XML-Eingabedatei (sample.xml):

Ausführung='1.0' Codierung='UTF-8' eigenständige='Nein' ?>

FormatVersion='1'>

>

Name='John' Typ='Teilzeit'>

>

Name='Sean' Typ='Vollzeit'>

>

Name='Sarah' Typ='Teilzeit'>

>

>

>

In diesem Beispielprogramm zeigen wir, wie man XML mit der pugixml-Bibliothek in C++ analysiert. Sie können die PugiXML-Bibliothek herunterladen von Hier .

#enthalten
#include 'pugixml.hpp'

mit Namensraumstd;
mit NamensraumPugi;

inthauptsächlich()
{
Kosten << ' Analysieren der Mitarbeiterdaten (sample.xml)..... ';


xml_document doc;

// Laden Sie die XML-Datei
wenn (!doc.lade Datei('sample.xml')) Rückkehr -1;

xml_node-Tools=doc.Kind('Mitarbeiterdaten').Kind('Mitarbeiter');


zum (xml_node_iterator it=Werkzeuge.Start();es!=Werkzeuge.Ende(); ++es)
{
Kosten << 'Mitarbeiter:';

zum (xml_attribute_iterator ait=es->Attribute_begin();gehören!=es->Attribute_Ende(); ++gehören)
{
Kosten << '' <<gehören->Name() << '=' <<gehören->Wert();
}

Kosten <<endl;
}

Kosten <<endl;

Rückkehr 0;

}

Beispiel-3: Parsen von XML in C++ mit TinyXML

In diesem Beispielprogramm zeigen wir, wie man XML mit der TinyXML-Bibliothek in C++ parst. Hier ist die XML-Eingabedatei (sample.xml):

Ausführung='1.0' Codierung='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

In diesem Beispielprogramm zeigen wir, wie man XML mit der TinyXML-Bibliothek in C++ parst. Sie können die TinyXML-Bibliothek herunterladen von Hier .

#enthalten
#enthalten
#enthalten
#include 'tinyxml2.cpp'

mit Namensraumstd;
mit Namensraumtinyxml2;


inthauptsächlich(Leere)
{
Kosten << ' Parsing meiner Schülerdaten (sample.xml) ....' <<endl;

// Lesen Sie die Datei sample.xml
XMLDocument-Dokument;
doc.Lade Datei( 'sample.xml' );

const verkohlen*Titel=doc.ErstesKindElement( 'MyStudentsData' )->ErstesKindElement( 'Student' )->GetText();
druckenf( 'Schülername: %s ', Titel);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Student' )->Erstes Kind()->Jemandem eine SMS schicken();
Titel=textNode->Wert();
druckenf( 'Schülername: %s ', Titel);


Rückkehr 0;
}

Abschluss

In diesem Artikel haben wir kurz diskutiert XML und sah sich drei verschiedene Beispiele für das Parsen von XML in C++ an. TinyXML ist eine minimalistische Bibliothek zum Parsen von XML-Daten. Die meisten Programmierer verwenden hauptsächlich RapidXML oder PugiXML, um XML-Daten zu parsen.