Sådan analyseres XML i C ++

How Parse Xml C



I denne artikel vil vi diskutere, hvordan man analyserer XML i C ++ programmeringssprog. Vi vil se flere eksempler på arbejde for at forstå XML -analysemekanismen i C ++.

Hvad er XML?

XML er et markupsprog og bruges hovedsageligt til lagring og overførsel af data på en organiseret måde. XML står for eXtensible Markup Language. Det ligner meget HTML. XML'en er fuldstændigt fokuseret på lagring og overførsel af dataene, mens HTML bruges til at vise dataene i browseren.







En prøve XML -fil/XML -syntaks

Her er et eksempel på en XML -fil:



version='1.0' indkodning='utf-8'?>

>

elev_type='Deltid'>

>Tom>

>

elev_type='Fuld tid'>

>Drake>

>

>

I modsætning til HTML er det et tag-orienteret markup-sprog, og vi kan definere vores eget tag i en XML-fil. I ovenstående eksempel har vi flere brugerdefinerede tags som f.eks. Hvert tag vil have det tilsvarende sluttag. er sluttagget for. Vi kan definere så mange brugerdefinerede tags, som vi vil organisere dataene.



Parsing Libraries i C ++:

Der er forskellige biblioteker til analyse af XML-data i de fleste programmeringssprog på højt niveau. C ++ er ikke en undtagelse. Her er de mest populære C ++ - biblioteker til analyse af XML -data:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Som navnet antyder, er RapidXML hovedsageligt fokuseret på hastighed, og det er et parsingbibliotek i DOM -stil. PugiXML understøtter Unicode -konvertering. Du vil måske bruge PugiXML, hvis du vil konvertere UTF-16 doc til UTF-8. TinyXML er en minimumsversion til analyse af XML-data og ikke så hurtig i forhold til de to foregående. Hvis du bare vil have arbejdet udført og er ligeglad med hastigheden, kan du vælge TinyXML.

Eksempler
Nu har vi en grundlæggende forståelse af XML- og XML -analysebiblioteker i C ++. Lad os nu se på et par eksempler til analyse af xml -fil i C ++:



  • Eksempel-1: Analyse XML i C ++ ved hjælp af RapidXML
  • Eksempel-2: Analyse XML i C ++ ved hjælp af PugiXML
  • Eksempel-3: Analyse XML i C ++ ved hjælp af TinyXML

I hvert af disse eksempler vil vi bruge de respektive biblioteker til at analysere en eksempel -XML -fil.

Eksempel-1: Analyse XML i C ++ ved hjælp af RapidXML

I dette eksempelprogram vil vi demonstrere, hvordan man analyserer xml ved hjælp af RapidXML -bibliotek i C ++. Her er input -XML -filen (sample.xml):

version='1.0' indkodning='utf-8'?>

>

elev_type='Deltid'>

>John>

>

elev_type='Fuld tid'>

>Sean>

>

elev_type='Deltid'>

>Sarah>

>

>

Vores mål her er at analysere ovenstående XML -fil ved hjælp af C ++. Her er C ++ - programmet til at analysere XML -data ved hjælp af RapidXML. Du kan downloade RapidXML -biblioteket fra Her .

#omfatte
#omfatte
#omfatte
#include 'rapidxml.hpp'

ved brug af navnerumtimer;
ved brug af navnerumrapidxml;


xml_documentdok
xml_node *root_node= NUL;

intvigtigste(ugyldig)
{
koste << ' nParsing af mine elevers data (sample.xml) ..... ' <<endl;

// Læs filen sample.xml
ifstream filen('sample.xml');
vektor<forkælelse>buffer((istreambuf_iterator<forkælelse>(filen)), istreambuf_iterator<forkælelse>());
buffer.skub tilbage(' 0');

// Parse bufferen
dok.parse<0>(&buffer[0]);

// Find ud af rodnoden
root_node=dok.første_knude('MyStudentsData');

// Iterere over elevknuderne
til (xml_node *elevnode=root_node->første_knude('Studerende');elevnode;elevnode=elevnode->næste_sibling())
{
koste << ' nElevtype = ' <<elevnode->første_attribut('student_type')->værdi();
koste <<endl;

// Interager over elevnavnene
til(xml_node *student_name_node=elevnode->første_knude('Navn');student_name_node;student_name_node=student_name_node->næste_sibling())
{
koste << 'Elevnavn =' <<student_name_node->værdi();
koste <<endl;
}
koste <<endl;
}

Vend tilbage 0;
}

Eksempel-2: Analyse XML i C ++ ved hjælp af PugiXML

I dette eksempelprogram vil vi demonstrere, hvordan man kan analysere xml ved hjælp af PugiXML -bibliotek i C ++. Her er input -XML -filen (sample.xml):

version='1.0' indkodning='UTF-8' standalone='ingen' ?>

FormatVersion='1'>

>

Navn='John' Type='Deltid'>

>

Navn='Sean' Type='Fuld tid'>

>

Navn='Sarah' Type='Deltid'>

>

>

>

I dette eksempelprogram vil vi demonstrere, hvordan man analyserer xml ved hjælp af pugixml -bibliotek i C ++. Du kan downloade PugiXML -biblioteket fra Her .

#omfatte
#include 'pugixml.hpp'

ved brug af navnerumtimer;
ved brug af navnerumpugi;

intvigtigste()
{
koste << ' nAnalyse af medarbejderdata (sample.xml) ..... n n';


xml_document dokument;

// indlæse XML -filen
hvis (!dok.load_file('sample.xml')) Vend tilbage -1;

xml_node værktøjer=dok.barn('Medarbejderdata').barn('Medarbejdere');


til (xml_node_iterator det=værktøjer.begynde();det!=værktøjer.ende(); ++det)
{
koste << 'Medarbejdere:';

til (xml_attribute_iterator ait=det->attributter_begynder();tilhører!=det->attributter_end(); ++tilhører)
{
koste << '' <<tilhører->navn() << '=' <<tilhører->værdi();
}

koste <<endl;
}

koste <<endl;

Vend tilbage 0;

}

Eksempel-3: Analyse XML i C ++ ved hjælp af TinyXML

I dette eksempelprogram vil vi demonstrere, hvordan man analyserer xml ved hjælp af TinyXML -bibliotek i C ++. Her er input -XML -filen (sample.xml):

version='1.0' indkodning='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

I dette eksempelprogram vil vi demonstrere, hvordan man analyserer xml ved hjælp af TinyXML -bibliotek i C ++. Du kan downloade TinyXML -biblioteket fra Her .

#omfatte
#omfatte
#omfatte
#include 'tinyxml2.cpp'

ved brug af navnerumtimer;
ved brug af navnerumlillexml2;


intvigtigste(ugyldig)
{
koste << ' nParsing af mine elevers data (sample.xml) ..... ' <<endl;

// Læs filen sample.xml
XMLDocument doc;
dok.LoadFile( 'sample.xml' );

konst forkælelse*titel=dok.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Studerende' )->GetText();
printf( 'Elevnavn: %s n', titel);


XMLText*textNode=dok.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Studerende' )->Første barn()->TilTekst();
titel=textNode->Værdi();
printf( 'Elevnavn: %s n', titel);


Vend tilbage 0;
}

Konklusion

I denne artikel har vi kort diskuteret XML og kiggede på tre forskellige eksempler på, hvordan man analyserer XML i C ++. TinyXML er et minimalistisk bibliotek til analyse af XML -data. De fleste af programmørerne bruger hovedsageligt RapidXML eller PugiXML til at analysere XML -data.