XML -i sõelumine C ++ -is

How Parse Xml C



Selles artiklis käsitleme XML -i analüüsimist C ++ programmeerimiskeeles. Näeme XML -i parsimismehhanismi mõistmiseks C ++ mitmeid töötavaid näiteid.

Mis on XML?

XML on märgistuskeel ja seda kasutatakse peamiselt andmete organiseeritud salvestamiseks ja edastamiseks. XML tähistab eXtensible Markup Language. See on väga sarnane HTML -iga. XML on täielikult keskendunud andmete salvestamisele ja edastamisele, samas kui HTML -i kasutatakse andmete kuvamiseks brauseris.





XML -faili näidis/XML -süntaks

Siin on XML -faili näidis:



versioon='1.0' kodeerimine='utf-8'?>

>

õpilase_tüüp='Poole kohaga'>

>Tom>

>

õpilase_tüüp='Täiskohaga'>

>Drake>

>

>

Erinevalt HTML-ist on see märgendile orienteeritud märgistuskeel ja me saame XML-failis oma sildi määratleda. Ülaltoodud näites on meil mitu kasutaja määratud märgendit, näiteks. Igal sildil on vastav lõpumärgend. on lõpu silt. Saame määratleda nii palju kasutaja määratud silte kui tahame andmeid korrastada.



Raamatukogude sõelumine C ++ keeles:

Enamikus kõrgetasemelistes programmeerimiskeeltes on XML-andmete parsimiseks erinevaid teeke. C ++ pole erand. Siin on XML -i andmete parsimiseks kõige populaarsemad C ++ teegid:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Nagu nimigi ütleb, on RapidXML keskendunud peamiselt kiirusele ja see on DOM -stiilis sõelumisraamatukogu. PugiXML toetab Unicode'i teisendamist. Kui soovite teisendada UTF-16 dokumendi UTF-8-ks, võiksite kasutada PugiXML-i. TinyXML on minimaalne versioon XML-i andmete analüüsimiseks ja mitte nii kiiresti kui kaks eelmist. Kui soovite töö lihtsalt ära teha ega hooli kiirusest, võite valida TinyXML.

Näited
Nüüd on meil põhiteadmised XML -i ja XML -i sõelumisteekidest C ++ -is. Vaatame nüüd paari näidet xml -faili analüüsimiseks C ++ -is:



  • Näide 1: sõeluge XML C ++ -is, kasutades RapidXML-i
  • Näide-2: sõeluge XML C ++ -is, kasutades PugiXML-i
  • Näide-3: sõeluge XML C ++ -is, kasutades TinyXML-i

Kõigi nende näidete puhul kasutame XML -näidisfaili sõelumiseks vastavaid teeke.

Näide 1: sõeluge XML C ++ -is, kasutades RapidXML-i

Selles näidisprogrammis demonstreerime, kuidas xml -i parsida, kasutades RapidXML -i teeki C ++ -is. Siin on XML -sisendfail (sample.xml):

versioon='1.0' kodeerimine='utf-8'?>

>

õpilase_tüüp='Poole kohaga'>

>John>

>

õpilase_tüüp='Täiskohaga'>

>Sean>

>

õpilase_tüüp='Poole kohaga'>

>Sarah>

>

>

Meie eesmärk on analüüsida ülaltoodud XML -faili, kasutades C ++. Siin on C ++ programm XML -andmete analüüsimiseks RapidXML -i abil. RapidXML -i kogu saate alla laadida saidilt Siin .

#kaasake
#kaasake
#kaasake
#include 'rapidxml.hpp'

kasutades nimeruumtundi;
kasutades nimeruumkiirxml;


xml_dokumentdok
xml_node *root_node= NULL;

intpeamine(tühine)
{
maksma << ' nMinu õpilaste andmete sõelumine (sample.xml) ..... ' <<endl;

// Loe faili sample.xml
ifstream theFile('sample.xml');
vektor<süsi>puhver((istreambuf_iterator<süsi>(fail)), istreambuf_iterator<süsi>());
puhver.lükka tagasi(' 0');

// Sõeluda puhvrit
dok.sõeluda<0>(&puhver[0]);

// Juuresõlme leidmine
root_node=dok.esimene_sõlm('MyStudentsData');

// Korda õpilaste sõlmede kohal
eest (xml_node *õpilase_sõlm=root_node->esimene_sõlm('Õpilane');õpilase_sõlm;õpilase_sõlm=õpilase_sõlm->next_sibling())
{
maksma << ' nÕpilase tüüp = ' <<õpilase_sõlm->esimene_atribuut('õpilase_tüüp')->väärtus();
maksma <<endl;

// Õpilaste nimedega suhtlemine
eest(xml_node *õpilase_nimi_sõlm=õpilase_sõlm->esimene_sõlm('Nimi');õpilase_nimi_sõlm;õpilase_nimi_sõlm=õpilase_nimi_sõlm->next_sibling())
{
maksma << 'Õpilase nimi =' <<õpilase_nimi_sõlm->väärtus();
maksma <<endl;
}
maksma <<endl;
}

tagasi 0;
}

Näide-2: sõeluge XML C ++ -is, kasutades PugiXML-i

Selles näiteprogrammis demonstreerime, kuidas xml -i parsida, kasutades PugiXML -i teeki C ++ -is. Siin on XML -sisendfail (sample.xml):

versioon='1.0' kodeerimine='UTF-8' eraldiseisev='ei' ?>

FormatVersion='1'>

>

Nimi='John' Tüüp='Poole kohaga'>

>

Nimi='Sean' Tüüp='Täiskohaga'>

>

Nimi='Sarah' Tüüp='Poole kohaga'>

>

>

>

Selles näidisprogrammis demonstreerime, kuidas xml -i sõeluda, kasutades C ++ pugixml -raamatukogu. PugiXML -i kogu saate alla laadida saidilt Siin .

#kaasake
#include 'pugixml.hpp'

kasutades nimeruumtundi;
kasutades nimeruumpugi;

intpeamine()
{
maksma << ' nTöötajate andmete sõelumine (sample.xml) ..... n n';


xml_document doc;

// XML -faili laadimine
kui (!dok.laadimisfail('sample.xml')) tagasi -1;

xml_node tööriistad=dok.laps('Töötajad Andmed').laps('Töötajad');


eest (xml_node_iterator seda=tööriistad.alustada();seda!=tööriistad.lõpp(); ++seda)
{
maksma << 'Töötajad:';

eest (xml_attribute_iterator ait=seda->attributes_begin();kuulumine!=seda->attributes_end(); ++kuulumine)
{
maksma << '' <<kuulumine->nimi() << '=' <<kuulumine->väärtus();
}

maksma <<endl;
}

maksma <<endl;

tagasi 0;

}

Näide-3: sõeluge XML C ++ -is, kasutades TinyXML-i

Selles näidisprogrammis demonstreerime, kuidas xml -i sõeluda, kasutades Ciny+TinyXML -i teeki. Siin on XML -sisendfail (sample.xml):

versioon='1.0' kodeerimine='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

Selles näidisprogrammis demonstreerime, kuidas xml -i sõeluda, kasutades Ciny+TinyXML -i teeki. TinyXML -i kogu saate alla laadida saidilt Siin .

#kaasake
#kaasake
#kaasake
#include 'tinyxml2.cpp'

kasutades nimeruumtundi;
kasutades nimeruumtinyxml2;


intpeamine(tühine)
{
maksma << ' nMinu õpilaste andmete sõelumine (sample.xml) ..... ' <<endl;

// Loe faili sample.xml
XMLDokumendi dok;
dok.LoadFile( 'sample.xml' );

const süsi*tiitel=dok.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Õpilane' )->GetText();
printf( 'Õpilase nimi: %s n', pealkiri);


XMLText*textNode=dok.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Õpilane' )->FirstChild()->Sõnumit saatma();
tiitel=textNode->Väärtus();
printf( 'Õpilase nimi: %s n', pealkiri);


tagasi 0;
}

Järeldus

Selles artiklis oleme lühidalt arutanud XML ja uuris kolme erinevat näidet, kuidas XML -i analüüsida C ++. TinyXML on minimalistlik raamatukogu XML -andmete analüüsimiseks. Enamik programmeerijaid kasutab XML -andmete sõelumiseks peamiselt RapidXML -i või PugiXML -i.