C++

Hoe XML te ontleden in C++

Hoe XML te ontleden in C++

In dit artikel gaan we bespreken hoe u XML kunt ontleden in de programmeertaal C++. We zullen verschillende werkvoorbeelden zien om het XML-parseermechanisme in C . te begrijpen++.

Wat is XML?

XML is een opmaaktaal en wordt voornamelijk gebruikt om gegevens op een georganiseerde manier op te slaan en over te dragen. XML staat voor eXtensible Markup Language. Het lijkt erg op HTML. De XML is volledig gericht op het opslaan en overbrengen van de gegevens, terwijl de HTML wordt gebruikt voor het weergeven van de gegevens in de browser.

Een voorbeeld van een XML-bestand/XML-syntaxis

Hier is een voorbeeld XML-bestand:




Tom


Mannetjeseend

In tegenstelling tot HTML is het een tag-georiënteerde opmaaktaal en kunnen we onze eigen tag in een XML-bestand definiëren define. In het bovenstaande voorbeeld hebben we verschillende door de gebruiker gedefinieerde tags zoals "”. Elke tag heeft de bijbehorende eindtag. “” is de eindtag voor “”. We kunnen zoveel door de gebruiker gedefinieerde tags definiëren als we de gegevens willen ordenen.

Bibliotheken ontleden in C++:

Er zijn verschillende bibliotheken om XML-gegevens te ontleden in de meeste programmeertalen op hoog niveau. C++ is geen uitzondering. Dit zijn de meest populaire C++-bibliotheken om XML-gegevens te ontleden:

  1. RapidXML
  2. PugiXML
  3. TinyXML

Zoals de naam al doet vermoeden, is de RapidXML voornamelijk gericht op snelheid, en het is een DOM-achtige ontledingsbibliotheek. PugiXML ondersteunt Unicode-conversie. Misschien wilt u PugiXML gebruiken als u UTF-16 doc naar UTF-8 wilt converteren. TinyXML is een minimale versie om XML-gegevens te ontleden en niet zo snel in vergelijking met de vorige twee. Als je gewoon de klus wilt klaren en niet om de snelheid geeft, kun je TinyXML kiezen.

Voorbeelden
Nu hebben we een basiskennis van XML- en XML-parseerbibliotheken in C++. Laten we nu een paar voorbeelden bekijken om het XML-bestand in C++ te ontleden:

In elk van deze voorbeelden zullen we de respectieve bibliotheken gebruiken om een ​​voorbeeld-XML-bestand te ontleden.

Voorbeeld-1: XML ontleden in C++ met RapidXML

In dit voorbeeldprogramma laten we zien hoe u xml kunt ontleden met behulp van de RapidXML-bibliotheek in C++. Hier is het invoer-XML-bestand (voorbeeld:.xml):




John


Sean


Sarah

Ons doel hier is om het bovenstaande XML-bestand te ontleden met behulp van C++. Hier is het C++-programma om XML-gegevens te ontleden met RapidXML. U kunt de RapidXML-bibliotheek hier downloaden.

#include
#include
#include
#include "rapidxml.hpp"
namespace std; gebruiken;
met behulp van naamruimte rapidxml;
xml_document<> doc
xml_node<> * root_node = NULL;
int hoofd(void)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Lees het voorbeeld.xml-bestand
ifstream theFile ("voorbeeld.xml");
vector buffer ((istreambuf_iterator)(theFile)), istreambuf_iterator());
buffer.push_back('\0');
// Parseer de buffer
doc.ontleden<0>(&buffer[0]);
// Ontdek het hoofdknooppunt
root_node = doc.first_node("MijnStudentenData");
// Herhaal de studentenknooppunten
for (xml_node<> * student_node = root_node->first_node("Student"); student_node; student_node = student_node->next_sibling())

cout << "\nStudent Type =   " << student_node->first_attribute("student_type")->value();
cout << endl;
// Interate over de studentennamen
for(xml_node<> * student_name_node = student_node->first_node("Naam"); ​​student_name_node; student_name_node = student_name_node->next_sibling())

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

cout << endl;

retourneer 0;

Voorbeeld-2: XML ontleden in C++ met PugiXML

In dit voorbeeldprogramma laten we zien hoe u xml kunt ontleden met behulp van de PugiXML-bibliotheek in C++. Hier is het invoer-XML-bestand (voorbeeld:.xml):











In dit voorbeeldprogramma laten we zien hoe u xml kunt ontleden met behulp van de pugixml-bibliotheek in C++. U kunt de PugiXML-bibliotheek hier downloaden.

#include
#include "pugixml.hpp"
namespace std; gebruiken;
gebruik van naamruimte pugi;
int hoofd()

cout << "\nParsing employees data (sample.xml)… \n\n";
xml_document doc;
// laad het XML-bestand
als (!doc.load_file("voorbeeld.xml")) retourneert -1;
xml_node tools = doc.kind("Werknemersgegevens").kind("Werknemers");
for (xml_node_iterator it = tools.beginnen(); het != gereedschap.einde(); ++het)

cout << "Employees:";
for (xml_attribute_iterator ait = it->attributes_begin(); ait != het->attributen_end(); ++ait)

cout << " " << ait->naam() << "=" << ait->waarde();

cout << endl;

cout << endl;
retourneer 0;

Voorbeeld-3: XML ontleden in C++ met TinyXML

In dit voorbeeldprogramma laten we zien hoe u xml kunt ontleden met behulp van de TinyXML-bibliotheek in C++. Hier is het invoer-XML-bestand (voorbeeld:.xml):



John
Sean
Sarah

In dit voorbeeldprogramma laten we zien hoe u xml kunt ontleden met behulp van de TinyXML-bibliotheek in C++. U kunt de TinyXML-bibliotheek hier downloaden.

#include
#include
#include
#include "tinyxml2.cpp"
namespace std; gebruiken;
met behulp van naamruimte tinyxml2;
int hoofd(void)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Lees het voorbeeld.xml-bestand
XMLDocument-document;
doc.LoadFile( "voorbeeld.xml" );
const char* titel = doc.FirstChildElement("MyStudentsData")->FirstChildElement("Student")->GetText();
printf( "Naam leerling: %s\n", titel );
XMLText* textNode = doc.LastChildElement("MyStudentsData")->LastChildElement("Student")->FirstChild()->ToText();
titel = textNode->Waarde();
printf( "Naam leerling: %s\n", titel );
retourneer 0;

Conclusie

In dit artikel hebben we XML kort besproken en drie verschillende voorbeelden bekeken van hoe XML in C . kan worden geparseerd++. TinyXML is een minimalistische bibliotheek voor het ontleden van XML-gegevens.  De meeste programmeurs gebruiken voornamelijk RapidXML of PugiXML om XML-gegevens te ontleden.

SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...
Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...