Kā parsēt XML C ++

How Parse Xml C



Šajā rakstā mēs apspriedīsim, kā parsēt XML C ++ programmēšanas valodā. Mēs redzēsim vairākus darba piemērus, lai izprastu XML parsēšanas mehānismu C ++.

Kas ir XML?

XML ir iezīmēšanas valoda, un to galvenokārt izmanto datu uzglabāšanai un pārsūtīšanai organizētā veidā. XML nozīmē eXtensible Markup Language. Tas ir ļoti līdzīgs HTML. XML ir pilnībā vērsts uz datu glabāšanu un pārsūtīšanu, savukārt HTML tiek izmantots datu parādīšanai pārlūkprogrammā.







XML faila/XML sintakses paraugs

Šeit ir XML faila paraugs:



versija='1.0' kodēšana='utf-8'?>

>

student_type=“Nepilna laika”>

>Toms>

>

student_type='Pilna laika'>

>Dreiks>

>

>

Atšķirībā no HTML, tā ir uz tagu orientēta iezīmēšanas valoda, un mēs varam definēt savu tagu XML failā. Iepriekš minētajā piemērā mums ir vairāki lietotāja definēti tagi, piemēram,. Katram tagam būs atbilstošais beigu tags. ir beigu tags. Mēs varam definēt tik daudz lietotāja definētu tagu, cik vēlamies sakārtot datus.



Bibliotēku parsēšana C ++:

Lielākajā daļā augsta līmeņa programmēšanas valodu XML datu parsēšanai ir dažādas bibliotēkas. C ++ nav izņēmums. Šeit ir populārākās C ++ bibliotēkas XML datu parsēšanai:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Kā norāda nosaukums, RapidXML galvenokārt koncentrējas uz ātrumu, un tā ir DOM stila parsēšanas bibliotēka. PugiXML atbalsta Unicode konvertēšanu. Iespējams, vēlēsities izmantot PugiXML, ja vēlaties pārvērst UTF-16 dokumentu par UTF-8. TinyXML ir minimālā versija XML datu parsēšanai un ne tik ātri, salīdzinot ar iepriekšējiem diviem. Ja vēlaties vienkārši paveikt darbu un nerūpēties par ātrumu, varat izvēlēties TinyXML.

Piemēri
Tagad mums ir pamatzināšanas par XML un XML parsēšanas bibliotēkām C ++. Tagad apskatīsim pāris piemērus, kā parsēt xml failu C ++:



  • 1. piemērs: Parsējiet XML C ++, izmantojot RapidXML
  • 2. piemērs: Parsējiet XML C ++, izmantojot PugiXML
  • 3. piemērs: Parsējiet XML C ++, izmantojot TinyXML

Katrā no šiem piemēriem mēs izmantosim attiecīgās bibliotēkas, lai parsētu XML faila paraugu.

1. piemērs: Parsējiet XML C ++, izmantojot RapidXML

Šajā programmas paraugā mēs parādīsim, kā parsēt xml, izmantojot RapidXML bibliotēku C ++. Šeit ir ievades XML fails (sample.xml):

versija='1.0' kodēšana='utf-8'?>

>

student_type=“Nepilna laika”>

>Džons>

>

student_type='Pilna laika'>

>Šons>

>

student_type=“Nepilna laika”>

>Sāra>

>

>

Mūsu mērķis šeit ir parsēt iepriekš minēto XML failu, izmantojot C ++. Šeit ir C ++ programma XML datu parsēšanai, izmantojot RapidXML. Jūs varat lejupielādēt RapidXML bibliotēku no Šeit .

#iekļaut
#iekļaut
#iekļaut
#include 'rapidxml.hpp'

izmantojot vārda telpastundas;
izmantojot vārda telpafastxml;


xml_documentdoc
xml_node *root_node= NULL;

intgalvenais(spēkā neesošs)
{
izmaksas << ' nManu skolēnu datu parsēšana (sample.xml) ..... ' <<endl;

// Izlasiet failu sample.xml
ifstream theFile('sample.xml');
vektors<char>buferšķīdums((istreambuf_iterator<char>(fails)), istreambuf_iterator<char>());
buferšķīdums.atgrūst(' 0');

// Parsējiet buferi
doc.parsēt<0>(&buferšķīdums[0]);

// Uzziniet saknes mezglu
root_node=doc.pirmais_mezgls('MyStudentsData');

// Atkārtojiet studentu mezglus
priekš (xml_node *students_node=root_node->pirmais_mezgls('Students');students_node;students_node=students_node->next_sibling())
{
izmaksas << ' nStudenta tips = ' <<students_node->first_attribute('students_type')->vērtību();
izmaksas <<endl;

// Mijiedarbojieties ar studentu vārdiem
priekš(xml_node *student_name_node=students_node->pirmais_mezgls('Vārds');student_name_node;student_name_node=student_name_node->next_sibling())
{
izmaksas << 'Studenta vārds =' <<student_name_node->vērtību();
izmaksas <<endl;
}
izmaksas <<endl;
}

atgriezties 0;
}

2. piemērs: Parsējiet XML C ++, izmantojot PugiXML

Šajā programmas paraugā mēs parādīsim, kā parsēt xml, izmantojot PugiXML bibliotēku C ++. Šeit ir ievades XML fails (sample.xml):

versija='1.0' kodēšana='UTF-8' savrups='Nē' ?>

FormatVersion='1'>

>

Vārds='Džons' Tips=“Nepilna laika”>

>

Vārds='Šons' Tips='Pilna laika'>

>

Vārds='Sāra' Tips=“Nepilna laika”>

>

>

>

Šajā programmas paraugā mēs parādīsim, kā parsēt xml, izmantojot pugixml bibliotēku C ++. PugiXML bibliotēku varat lejupielādēt no Šeit .

#iekļaut
#include 'pugixml.hpp'

izmantojot vārda telpastundas;
izmantojot vārda telpapugi;

intgalvenais()
{
izmaksas << ' nDarbinieku datu parsēšana (sample.xml) ..... n n';


xml_document doc;

// ielādēt XML failu
ja (!doc.ielādes_fails('sample.xml')) atgriezties -1;

xml_node rīki=doc.bērns('Darbinieku dati').bērns('Darbinieki');


priekš (xml_node_iterator to=instrumentus.sākt();to!=instrumentus.beigas(); ++to)
{
izmaksas << 'Darbinieki:';

priekš (xml_attribute_iterator ait=to->attributes_begin();piederība!=to->attributes_end(); ++piederība)
{
izmaksas << '' <<piederība->vārds() << '=' <<piederība->vērtību();
}

izmaksas <<endl;
}

izmaksas <<endl;

atgriezties 0;

}

3. piemērs: Parsējiet XML C ++, izmantojot TinyXML

Šajā programmas paraugā mēs parādīsim, kā parsēt xml, izmantojot TinyXML bibliotēku C ++. Šeit ir ievades XML fails (sample.xml):

versija='1.0' kodēšana='utf-8'?>

>

>Džons>

>Šons>

>Sāra>

>

Šajā programmas paraugā mēs parādīsim, kā parsēt xml, izmantojot TinyXML bibliotēku C ++. Jūs varat lejupielādēt TinyXML bibliotēku no Šeit .

#iekļaut
#iekļaut
#iekļaut
#include 'tinyxml2.cpp'

izmantojot vārda telpastundas;
izmantojot vārda telpatinyxml2;


intgalvenais(spēkā neesošs)
{
izmaksas << ' nManu skolēnu datu parsēšana (sample.xml) ..... ' <<endl;

// Izlasiet failu sample.xml
XMLDokumenta dok;
doc.LoadFile( 'sample.xml' );

konst char*titulu=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Students' )->GetText();
printf( 'Studenta vārds: %s n', virsraksts);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Students' )->FirstChild()->Rakstīt();
titulu=textNode->Vērtība();
printf( 'Studenta vārds: %s n', virsraksts);


atgriezties 0;
}

Secinājums

Šajā rakstā mēs īsi apspriedām XML un apskatīja trīs dažādus piemērus, kā parsēt XML C ++. TinyXML ir minimālisma bibliotēka XML datu parsēšanai. Lielākā daļa programmētāju XML datu parsēšanai galvenokārt izmanto RapidXML vai PugiXML.