Kako razčleniti XML v C ++

How Parse Xml C



V tem članku bomo razpravljali o tem, kako razčleniti XML v programskem jeziku C ++. Videli bomo več delovnih primerov za razumevanje mehanizma razčlenjevanja XML v C ++.

Kaj je XML?

XML je označevalni jezik in se uporablja predvsem za shranjevanje in organiziran prenos podatkov. XML je kratica za eXtensible Markup Language. Je zelo podoben HTML -ju. XML je v celoti osredotočen na shranjevanje in prenos podatkov, medtem ko se HTML uporablja za prikaz podatkov v brskalniku.







Vzorec datoteke XML/sintakse XML

Tu je vzorčna datoteka XML:



različico='1,0' kodiranje='utf-8'?>

>

študentski tip='Krajši delovni čas'>

>Tom>

>

študentski tip='Polni delovni čas'>

>Drake>

>

>

Za razliko od HTML-ja je to označevalni jezik, usmerjen v oznako, in lastno oznako lahko definiramo v datoteki XML. V zgornjem primeru imamo več uporabniško definiranih oznak, kot so. Vsaka oznaka bo imela ustrezno končno oznako. je zaključna oznaka za. Določimo lahko toliko uporabniško določenih oznak, kolikor želimo organizirati podatke.



Razčlenjevanje knjižnic v C ++:

Za razčlenjevanje podatkov XML v večini programskih jezikov na visoki ravni obstajajo različne knjižnice. C ++ ni izjema. Tu so najbolj priljubljene knjižnice C ++ za razčlenjevanje podatkov XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Kot že ime pove, je RapidXML osredotočen predvsem na hitrost in je knjižnica za razčlenjevanje v slogu DOM. PugiXML podpira pretvorbo Unicode. Če želite pretvoriti dokument UTF-16 v UTF-8, boste morda želeli uporabiti PugiXML. TinyXML je minimalna različica za razčlenjevanje podatkov XML in ni tako hitra v primerjavi s prejšnjima dvema. Če želite opraviti delo in vam ni mar za hitrost, lahko izberete TinyXML.

Primeri
Zdaj imamo osnovno razumevanje knjižnic za razčlenjevanje XML in XML v C ++. Zdaj pa poglejmo nekaj primerov za razčlenitev datoteke xml v C ++:



  • Primer 1: Razčlenite XML v C ++ z uporabo RapidXML
  • Primer 2: Razčlenite XML v C ++ z uporabo PugiXML
  • Primer 3: Razčlenite XML v C ++ z uporabo TinyXML

V vsakem od teh primerov bomo za razčlenitev vzorčne datoteke XML uporabili ustrezne knjižnice.

Primer 1: Razčlenite XML v C ++ z uporabo RapidXML

V tem primeru programa bomo pokazali, kako razčleniti xml z uporabo knjižnice RapidXML v C ++. Tu je vhodna datoteka XML (sample.xml):

različico='1,0' kodiranje='utf-8'?>

>

študentski tip='Krajši delovni čas'>

>Janez>

>

študentski tip='Polni delovni čas'>

>Sean>

>

študentski tip='Krajši delovni čas'>

>Sarah>

>

>

Naš cilj je razčleniti zgornjo datoteko XML z uporabo C ++. Tu je program C ++ za razčlenjevanje podatkov XML z uporabo RapidXML. Knjižnico RapidXML lahko prenesete iz Tukaj .

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

z uporabo imenski prostorure;
z uporabo imenski prostorrapidxml;


xml_documentdoc
xml_node *root_node= NIČ;

intglavni(nično)
{
stroški << ' nRazčlenjevanje podatkov mojih študentov (sample.xml) ..... ' <<endl;

// Preberite datoteko sample.xml
ifstream datoteko('sample.xml');
vektor<char>pufra((istreambuf_iterator<char>(datoteka)), istreambuf_iterator<char>());
pufra.porini nazaj(' 0');

// Razčlenimo medpomnilnik
doc.razčleniti<0>(&pufra[0]);

// Ugotovite korensko vozlišče
root_node=doc.first_node('MyStudentsData');

// Iteracija nad študentskimi vozlišči
za (xml_node *student_node=root_node->first_node('Študent');student_node;student_node=student_node->next_sibling())
{
stroški << ' nVrsta študenta = ' <<student_node->prvi_atribut('student_type')->vrednost();
stroški <<endl;

// Interate nad študentskimi imeni
za(xml_node *študentsko_imensko vozlišče=student_node->first_node('Ime');študentsko_imensko vozlišče;študentsko_imensko vozlišče=študentsko_imensko vozlišče->next_sibling())
{
stroški << 'Ime študenta =' <<študentsko_imensko vozlišče->vrednost();
stroški <<endl;
}
stroški <<endl;
}

vrnitev 0;
}

Primer 2: Razčlenite XML v C ++ z uporabo PugiXML

V tem primeru programa bomo pokazali, kako razčleniti xml z uporabo knjižnice PugiXML v C ++. Tu je vhodna datoteka XML (sample.xml):

različico='1,0' kodiranje='UTF-8' samostojno='ne' ?>

FormatVersion='1'>

>

Ime='Janez' Vrsta='Krajši delovni čas'>

>

Ime='Sean' Vrsta='Polni delovni čas'>

>

Ime='Sarah' Vrsta='Krajši delovni čas'>

>

>

>

V tem primeru programa bomo pokazali, kako razčleniti xml z uporabo knjižnice pugixml v C ++. Knjižnico PugiXML lahko prenesete iz Tukaj .

#vključi
#include 'pugixml.hpp'

z uporabo imenski prostorure;
z uporabo imenski prostorpugi;

intglavni()
{
stroški << ' nRazčlenjevanje podatkov o zaposlenih (sample.xml) ..... n n';


xml_document doc;

// naložimo datoteko XML
če (!doc.load_file('sample.xml')) vrnitev -1;

orodja xml_node=doc.otrok('EmployeesData').otrok('Zaposleni');


za (xml_node_iterator=orodja.začeti();to!=orodja.konec(); ++to)
{
stroški << 'Zaposleni:';

za (xml_attribute_iterator ait=to->attributes_begin();pripadnost!=to->attributes_end(); ++pripadnost)
{
stroški << '' <<pripadnost->ime() << '=' <<pripadnost->vrednost();
}

stroški <<endl;
}

stroški <<endl;

vrnitev 0;

}

Primer 3: Razčlenite XML v C ++ z uporabo TinyXML

V tem primeru programa bomo pokazali, kako razčleniti xml z uporabo knjižnice TinyXML v C ++. Tu je vhodna datoteka XML (sample.xml):

različico='1,0' kodiranje='utf-8'?>

>

>Janez>

>Sean>

>Sarah>

>

V tem primeru programa bomo pokazali, kako razčleniti xml z uporabo knjižnice TinyXML v C ++. Knjižnico TinyXML lahko prenesete iz Tukaj .

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

z uporabo imenski prostorure;
z uporabo imenski prostortinyxml2;


intglavni(nično)
{
stroški << ' nRazčlenjevanje podatkov mojih študentov (sample.xml) ..... ' <<endl;

// Preberite datoteko sample.xml
XMLDocument doc;
doc.LoadFile( 'sample.xml' );

const char*naslov=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Študent' )->GetText();
printf( 'Ime študenta: %s n', naslov);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Študent' )->FirstChild()->Pošiljati sporočila();
naslov=textNode->Vrednost();
printf( 'Ime študenta: %s n', naslov);


vrnitev 0;
}

Zaključek

V tem članku smo na kratko razpravljali XML in pogledali tri različne primere, kako razčleniti XML v C ++. TinyXML je minimalistična knjižnica za razčlenjevanje podatkov XML. Večina programerjev za razčlenjevanje podatkov XML uporablja predvsem RapidXML ali PugiXML.