Hoe XML te ontleden in C++

How Parse Xml C



In dit artikel gaan we bespreken hoe XML in de programmeertaal C++ kan worden geparseerd. 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:



versie='1.0' codering='utf-8'?>

>

student_type='Deeltijd'>

>Tom>

>

student_type='Full time'>

>Mannetjeseend>

>

>

In tegenstelling tot HTML is het een op tags georiënteerde opmaaktaal en kunnen we onze eigen tag in een XML-bestand definiëren. 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-document 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:



  • Voorbeeld-1: XML ontleden in C++ met RapidXML
  • Voorbeeld-2: XML ontleden in C++ met PugiXML
  • Voorbeeld-3: XML ontleden in C++ met TinyXML

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 (sample.xml):

versie='1.0' codering='utf-8'?>

>

student_type='Deeltijd'>

>John>

>

student_type='Full time'>

>Sean>

>

student_type='Deeltijd'>

>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 downloaden van: Hier .

#erbij betrekken
#erbij betrekken
#erbij betrekken
#include 'rapidxml.hpp'

gebruik makend van naamruimteuur;
gebruik makend van naamruimterapidxml;


xml_documentdoc
xml_node *root_node= NUL;

inthoofd(leegte)
{
kosten << 'NGegevens van mijn studenten ontleden (sample.xml).....' <<eindel;

// Lees het voorbeeld.xml-bestand
ifstream het bestand('voorbeeld.xml');
vector<char>buffer((istreambuf_iterator<char>(het bestand)), istreambuf_iterator<char>());
buffer.terugduwen(' 0');

// Parseer de buffer
doc.ontleden<0>(&buffer[0]);

// Ontdek het hoofdknooppunt
root_node=doc.eerste_knooppunt('MijnStudentenData');

// Herhaal de studentenknooppunten
voor (xml_node *student_node=root_node->eerste_knooppunt('Student');student_node;student_node=student_node->volgende_broer/zus())
{
kosten << 'NSoort student = ' <<student_node->eerste_kenmerk('student_type')->waarde();
kosten <<eindel;

// Interate over de studentennamen
voor(xml_node *student_name_node=student_node->eerste_knooppunt('Naam');student_name_node;student_name_node=student_name_node->volgende_broer/zus())
{
kosten << 'Naam leerling = ' <<student_name_node->waarde();
kosten <<eindel;
}
kosten <<eindel;
}

opbrengst 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 (sample.xml):

versie='1.0' codering='UTF-8' op zichzelf staand='Nee' ?>

FormaatVersie='1'>

>

Naam='John' Type='Deeltijd'>

>

Naam='Sean' Type='Full time'>

>

Naam='Sarah' Type='Deeltijd'>

>

>

>

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

#erbij betrekken
#include 'pugixml.hpp'

gebruik makend van naamruimteuur;
gebruik makend van naamruimtepugi;

inthoofd()
{
kosten << 'NWerknemersgegevens parseren (sample.xml).....NN';


xml_document doc;

// laad het XML-bestand
indien (!doc.laad bestand('voorbeeld.xml')) opbrengst -1;

xml_node-tools=doc.kind('Werknemersgegevens').kind('Medewerkers');


voor (xml_node_iterator it=gereedschap.beginnen();het!=gereedschap.einde(); ++het)
{
kosten << 'Medewerkers:';

voor (xml_attribute_iterator ait=het->attributes_begin();erbij horen!=het->attributes_end(); ++erbij horen)
{
kosten << '' <<erbij horen->naam() << '=' <<erbij horen->waarde();
}

kosten <<eindel;
}

kosten <<eindel;

opbrengst 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 (sample.xml):

versie='1.0' codering='utf-8'?>

>

>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 downloaden van: Hier .

#erbij betrekken
#erbij betrekken
#erbij betrekken
#include 'tinyxml2.cpp'

gebruik makend van naamruimteuur;
gebruik makend van naamruimtetinyxml2;


inthoofd(leegte)
{
kosten << 'NGegevens van mijn studenten ontleden (sample.xml).....' <<eindel;

// Lees het voorbeeld.xml-bestand
XMLDocument-document;
doc.Laad bestand( 'voorbeeld.xml' );

const char*titel=doc.EersteKindElement( 'MijnStudentenData' )->EersteKindElement( 'Student' )->GetText();
printf( 'Naam leerling: %sN', titel);


XMLText*tekstknooppunt=doc.LaatsteKindElement( 'MijnStudentenData' )->LaatsteKindElement( 'Student' )->Eerstgeborene()->Sms'en();
titel=tekstknooppunt->Waarde();
printf( 'Naam leerling: %sN', titel);


opbrengst 0;
}

Conclusie

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