Kuinka jäsentää XML C ++: ssa

How Parse Xml C



Tässä artikkelissa aiomme keskustella XML: n jäsentämisestä C ++ -ohjelmointikielellä. Näemme useita toimivia esimerkkejä XML -jäsennysmekanismin ymmärtämiseksi C ++: ssa.

Mikä on XML?

XML on merkintäkieli, ja sitä käytetään pääasiassa tietojen järjestämiseen ja tallentamiseen. XML tarkoittaa eXtensible Markup Language. Se on hyvin samanlainen kuin HTML. XML on täysin keskittynyt tietojen tallentamiseen ja siirtämiseen, kun taas HTML -koodia käytetään tietojen näyttämiseen selaimessa.







Esimerkki XML -tiedostosta/XML -syntaksista

Tässä on esimerkki XML -tiedostosta:



versio='1.0' koodaus='utf-8'?>

>

opiskelijan_tyyppi='Osa-aikainen'>

>Tom>

>

opiskelijan_tyyppi='Täysaikainen'>

>Drake>

>

>

Toisin kuin HTML, se on tag-suuntautunut merkintäkieli, ja voimme määrittää oman tunnisteemme XML-tiedostossa. Yllä olevassa esimerkissä meillä on useita käyttäjän määrittämiä tunnisteita, kuten. Jokaisella tunnisteella on vastaava lopputunniste. on lopputunniste kohteelle. Voimme määrittää niin monta käyttäjän määrittämää tunnistetta kuin haluamme järjestää tiedot.



Kirjastojen jäsentäminen C ++: ssa:

Useilla korkean tason ohjelmointikielillä on erilaisia ​​kirjastoja XML-datan jäsentämiseksi. C ++ ei ole poikkeus. Tässä ovat suosituimmat C ++ -kirjastot XML -datan jäsentämiseen:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Kuten nimestä voi päätellä, RapidXML keskittyy lähinnä nopeuteen, ja se on DOM -tyylinen jäsennyskirjasto. PugiXML tukee Unicode -muunnosta. Voit käyttää PugiXML-tiedostoa, jos haluat muuntaa UTF-16-dokumentin UTF-8-muotoon. TinyXML on vähimmäisversio XML-datan jäsentämiseen, eikä niin nopea verrattuna kahteen edelliseen. Jos haluat vain saada työn valmiiksi etkä välitä nopeudesta, voit valita TinyXML: n.

Esimerkkejä
Nyt meillä on perustiedot XML- ja XML -jäsennyskirjastoista C ++: ssa. Katsotaanpa nyt muutamia esimerkkejä xml -tiedoston jäsentämisestä C ++: ssa:



  • Esimerkki 1: jäsennä XML C ++: ssa käyttämällä RapidXML: ää
  • Esimerkki 2: jäsennä XML C ++: ssa käyttäen PugiXML: ää
  • Esimerkki 3: jäsennä XML C ++: ssa käyttämällä TinyXML: ää

Kussakin näistä esimerkeistä käytämme vastaavia kirjastoja XML -mallitiedoston jäsentämiseen.

Esimerkki 1: jäsennä XML C ++: ssa käyttämällä RapidXML: ää

Tässä esimerkkiohjelmassa esittelemme, miten jäsennellään xml RapidXML -kirjastolla C ++: ssa. Tässä on syötetty XML -tiedosto (sample.xml):

versio='1.0' koodaus='utf-8'?>

>

opiskelijan_tyyppi='Osa-aikainen'>

>John>

>

opiskelijan_tyyppi='Täysaikainen'>

>Sean>

>

opiskelijan_tyyppi='Osa-aikainen'>

>Sarah>

>

>

Tavoitteenamme on jäsentää yllä oleva XML -tiedosto C ++: lla. Tässä on C ++ -ohjelma XML -datan jäsentämiseen RapidXML: n avulla. Voit ladata RapidXML -kirjaston osoitteesta Tässä .

#sisältää
#sisältää
#sisältää
#include 'rapidxml.hpp'

käyttämällä nimiavaruustuntia;
käyttämällä nimiavaruusquickxml;


xml_documentdoc
xml_node *root_node= TYHJÄ;

inttärkein(mitätön)
{
kustannus << '' nOppilaiden tietojen jäsentäminen (näyte.xml) ..... ' <<endl;

// Lue sample.xml -tiedosto
ifstream theFile('sample.xml');
vektori<hiiltyä>puskuri((istreambuf_iterator<hiiltyä>(tiedosto)), istreambuf_iterator<hiiltyä>());
puskuri.työnnä takaisin('' 0'');

// jäsennä puskuri
doc.jäsentää<0>(&puskuri[0]);

// Selvitä juurisolmu
root_node=doc.ensimmäinen_solmu('Omat opiskelijatiedot');

// Toista oppilaiden solmujen yli
varten (xml_node *opiskelija_solmu=root_node->ensimmäinen_solmu('Opiskelija');opiskelija_solmu;opiskelija_solmu=opiskelija_solmu->seuraava_sibling())
{
kustannus << '' nOpiskelijan tyyppi = ' <<opiskelija_solmu->first_attribute('opiskelijan_tyyppi')->arvo();
kustannus <<endl;

// Ole vuorovaikutuksessa oppilaiden nimien kanssa
varten(xml_node *oppilaan_nimi_solmu=opiskelija_solmu->ensimmäinen_solmu('Nimi');oppilaan_nimi_solmu;oppilaan_nimi_solmu=oppilaan_nimi_solmu->seuraava_sibling())
{
kustannus << 'Opiskelijan nimi =' <<oppilaan_nimi_solmu->arvo();
kustannus <<endl;
}
kustannus <<endl;
}

palata 0;
}

Esimerkki 2: jäsennä XML C ++: ssa käyttäen PugiXML: ää

Tässä esimerkkiohjelmassa esittelemme, miten jäsennellään xml PugiXML -kirjastolla C ++: ssa. Tässä on syötetty XML -tiedosto (sample.xml):

versio='1.0' koodaus='UTF-8' itsenäinen='ei' ?>

FormatVersion='1'>

>

Nimi='John' Tyyppi='Osa-aikainen'>

>

Nimi='Sean' Tyyppi='Täysaikainen'>

>

Nimi='Sarah' Tyyppi='Osa-aikainen'>

>

>

>

Tässä esimerkkiohjelmassa esittelemme, miten jäsennellään xml käyttämällä pugixml -kirjastoa C ++: ssa. Voit ladata PugiXML -kirjaston osoitteesta Tässä .

#sisältää
#include 'pugixml.hpp'

käyttämällä nimiavaruustuntia;
käyttämällä nimiavaruuspugi;

inttärkein()
{
kustannus << '' nTyöntekijöiden tietojen jäsentäminen (näyte.xml) ..... n n'';


xml_document doc;

// lataa XML -tiedosto
jos (!doc.load_file('sample.xml')) palata -1;

xml_node -työkalut=doc.lapsi('TyöntekijätData').lapsi('Työntekijät');


varten (xml_node_iterator sitä=työkaluja.alkaa();se!=työkaluja.loppuun(); ++se)
{
kustannus << 'Työntekijät:';

varten (xml_attribute_iterator ait=se->attributes_begin();kuulumista!=se->attributes_end(); ++kuulumista)
{
kustannus << '' <<kuulumista->nimi() << '=' <<kuulumista->arvo();
}

kustannus <<endl;
}

kustannus <<endl;

palata 0;

}

Esimerkki 3: jäsennä XML C ++: ssa käyttämällä TinyXML: ää

Tässä esimerkkiohjelmassa esittelemme, miten jäsennellään xml käyttämällä TinyXML -kirjastoa C ++: ssa. Tässä on syötetty XML -tiedosto (sample.xml):

versio='1.0' koodaus='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

Tässä esimerkkiohjelmassa esittelemme, miten jäsennellään xml käyttämällä TinyXML -kirjastoa C ++: ssa. Voit ladata TinyXML -kirjaston osoitteesta Tässä .

#sisältää
#sisältää
#sisältää
#include 'tinyxml2.cpp'

käyttämällä nimiavaruustuntia;
käyttämällä nimiavaruustinyxml2;


inttärkein(mitätön)
{
kustannus << '' nOppilaiden tietojen jäsentäminen (näyte.xml) ..... ' <<endl;

// Lue sample.xml -tiedosto
XMLDocument doc;
doc.Lataa tiedosto( 'sample.xml' );

const hiiltyä*otsikko=doc.EnsimmäinenLapsiElementti( 'Omat opiskelijatiedot' )->EnsimmäinenLapsiElementti( 'Opiskelija' )->GetText();
printf( 'Oppilaan nimi: %s n'', otsikko);


XMLText*textNode=doc.ViimeinenLapsiElementti( 'Omat opiskelijatiedot' )->ViimeinenLapsiElementti( 'Opiskelija' )->Ensimmäinen lapsi()->Lähettää tekstiviesti();
otsikko=textNode->Arvo();
printf( 'Oppilaan nimi: %s n'', otsikko);


palata 0;
}

Johtopäätös

Tässä artikkelissa olemme keskustelleet lyhyesti XML ja tarkasteli kolmea eri esimerkkiä XML: n jäsentämisestä C ++: ssa. TinyXML on minimalistinen kirjasto XML -tietojen jäsentämiseen. Useimmat ohjelmoijat käyttävät pääasiassa RapidXML: ää tai PugiXML: ää XML -datan jäsentämiseen.