Kako raščlaniti XML u C ++

How Parse Xml C

U ovom ćemo članku raspravljati o tome kako raščlaniti XML u programskom jeziku C ++. Vidjet ćemo nekoliko radnih primjera za razumijevanje XML mehanizma raščlanjivanja u C ++.

Što je XML?

XML je jezik za označavanje i uglavnom se koristi za pohranu i prijenos podataka na organiziran način. XML je kratica za eXtensible Markup Language. Vrlo je sličan HTML -u. XML je u potpunosti usredotočen na pohranu i prijenos podataka, dok se HTML koristi za prikaz podataka u pregledniku.

Primjer XML datoteke/XML sintakse

Evo primjera XML datoteke:



verzija='1,0' kodiranje='utf-8'?>

>

student_type='Honorarno'>

>Tom>

>

student_type='Puno vrijeme'>

>Drake>

>

>

Za razliku od HTML-a, to je jezik označavanja orijentiran na oznake, a svoju oznaku možemo definirati u XML datoteci. U gornjem primjeru imamo nekoliko korisnički definiranih oznaka kao što su. Svaka će oznaka imati odgovarajuću završnu oznaku. je završna oznaka za. Možemo definirati onoliko korisnički definiranih oznaka koliko želimo organizirati podatke.



Raščlanjivanje knjižnica u C ++:

Postoje razne knjižnice za raščlanjivanje XML podataka u većini programskih jezika na visokoj razini. C ++ nije iznimka. Evo najpopularnijih C ++ knjižnica za raščlanjivanje XML podataka:

  1. RapidXML
  2. PugiXML
  3. TinyXML

Kao što ime govori, RapidXML je uglavnom fokusiran na brzinu i to je biblioteka za raščlanjivanje u DOM stilu. PugiXML podržava pretvorbu Unicode. Možda želite koristiti PugiXML ako želite pretvoriti UTF-16 doc u UTF-8. TinyXML je minimalna verzija za raščlanjivanje XML podataka, ali ne tako brza u usporedbi s prethodna dva. Ako želite samo obaviti posao i ne brinete o brzini, možete odabrati TinyXML.

Primjeri
Sada imamo osnovno razumijevanje XML i XML biblioteka za raščlanjivanje u C ++. Pogledajmo sada nekoliko primjera za raščlanjivanje xml datoteke u C ++:



  • Primjer-1: Raščlanite XML u C ++ pomoću RapidXML-a
  • Primjer-2: Raščlanite XML u C ++ pomoću PugiXML-a
  • Primjer-3: Raščlanite XML u C ++ pomoću TinyXML-a

U svakom od ovih primjera koristit ćemo odgovarajuće knjižnice za raščlanjivanje uzorka XML datoteke.

Primjer-1: Raščlanite XML u C ++ pomoću RapidXML-a

U ovom primjeru programa pokazat ćemo kako raščlaniti xml pomoću knjižnice RapidXML u C ++. Evo ulazne XML datoteke (sample.xml):

verzija='1,0' kodiranje='utf-8'?>

>

student_type='Honorarno'>

>Ivan>

>

student_type='Puno vrijeme'>

>Sean>

>

student_type='Honorarno'>

>Sarah>

>

>

Naš cilj ovdje je raščlaniti gornju XML datoteku pomoću C ++. Ovdje je C ++ program za raščlanjivanje XML podataka pomoću RapidXML -a. Biblioteku RapidXML možete preuzeti s Ovdje .

#uključi
#uključi
#uključi
#include 'rapidxml.hpp'

koristeći imenski prostorsati;
koristeći imenski prostorrapidxml;


xml_documentdoc
xml_node *root_node= NULL;

intglavni(poništiti)
{
trošak << ' nRaščlanjivanje podataka mojih učenika (sample.xml) ..... ' <<endl;

// Pročitajte datoteku sample.xml
ifstream datoteku('sample.xml');
vektor<char>pufer((istreambuf_iterator<char>(Datoteka)), istreambuf_iterator<char>());
pufer.odgurnuti(' 0');

// Raščlanite međuspremnik
doc.raščlaniti<0>(&pufer[0]);

// Saznajte korijenski čvor
root_node=doc.prvi_čvor('MyStudentsData');

// Iteracija nad studentskim čvorovima
za (xml_node *student_node=root_node->prvi_čvor('Student');student_node;student_node=student_node->next_sibling())
{
trošak << ' nVrsta učenika = ' <<student_node->prvi_atribut('student_type')->vrijednost();
trošak <<endl;

// Interesujte se nad studentskim imenima
za(xml_node *čvor_naziv_učenika=student_node->prvi_čvor('Ime');čvor_naziv_učenika;čvor_naziv_učenika=čvor_naziv_učenika->next_sibling())
{
trošak << 'Ime učenika =' <<čvor_naziv_učenika->vrijednost();
trošak <<endl;
}
trošak <<endl;
}

povratak 0;
}

Primjer-2: Raščlanite XML u C ++ pomoću PugiXML-a

U ovom primjeru programa pokazat ćemo kako raščlaniti xml pomoću PugiXML knjižnice u C ++. Evo ulazne XML datoteke (sample.xml):

verzija='1,0' kodiranje='UTF-8' samostalan='Ne' ?>

FormatVersion='1'>

>

Ime='Ivan' Tip='Honorarno'>

>

Ime='Sean' Tip='Puno vrijeme'>

>

Ime='Sarah' Tip='Honorarno'>

>

>

>

U ovom primjeru programa pokazat ćemo kako raščlaniti xml pomoću knjižnice pugixml u C ++. Knjižnicu PugiXML možete preuzeti s Ovdje .

#uključi
#include 'pugixml.hpp'

koristeći imenski prostorsati;
koristeći imenski prostorpugi;

intglavni()
{
trošak << ' nRaščlanjivanje podataka o zaposlenicima (sample.xml) ..... n n';


xml_document doc;

// učitavanje XML datoteke
ako (!doc.load_file('sample.xml')) povratak -1;

xml_node alati=doc.dijete('Podaci o zaposlenicima').dijete('Zaposlenici');


za (xml_node_iterator=alata.početi();to!=alata.kraj(); ++to)
{
trošak << 'Zaposlenici:';

za (xml_attribute_iterator ait=to->atributi_početi();pripadanje!=to->atributi_kraj(); ++pripadanje)
{
trošak << '' <<pripadanje->Ime() << '=' <<pripadanje->vrijednost();
}

trošak <<endl;
}

trošak <<endl;

povratak 0;

}

Primjer-3: Raščlanite XML u C ++ pomoću TinyXML-a

U ovom primjeru programa pokazat ćemo kako raščlaniti xml pomoću knjižnice TinyXML u C ++. Evo ulazne XML datoteke (sample.xml):

verzija='1,0' kodiranje='utf-8'?>

>

>Ivan>

>Sean>

>Sarah>

>

U ovom primjeru programa pokazat ćemo kako raščlaniti xml pomoću knjižnice TinyXML u C ++. Knjižnicu TinyXML možete preuzeti s Ovdje .

#uključi
#uključi
#uključi
#include 'tinyxml2.cpp'

koristeći imenski prostorsati;
koristeći imenski prostortinyxml2;


intglavni(poništiti)
{
trošak << ' nRaščlanjivanje podataka mojih učenika (sample.xml) ..... ' <<endl;

// Pročitajte datoteku sample.xml
XMLDocument doc;
doc.LoadFile( 'sample.xml' );

konst char*titula=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Student' )->GetText();
printf( 'Ime učenika: %s n', naslov);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Student' )->FirstChild()->ToText();
titula=textNode->Vrijednost();
printf( 'Ime učenika: %s n', naslov);


povratak 0;
}

Zaključak

U ovom smo članku ukratko raspravljali XML i pogledao tri različita primjera kako raščlaniti XML u C ++. TinyXML je minimalistička knjižnica za raščlanjivanje XML podataka. Većina programera uglavnom koristi RapidXML ili PugiXML za raščlanjivanje XML podataka.