Hogyan kell elemezni az XML -t C ++ nyelven

How Parse Xml C



Ebben a cikkben az XML C ++ programozási nyelven történő elemzésének módjáról fogunk beszélni. Több példát fogunk látni az XML elemzési mechanizmus megértésére a C ++ nyelven.

Mi az XML?

XML jelölőnyelv, és főként adatok szervezett tárolására és továbbítására szolgál. Az XML az eXtensible Markup Language rövidítése. Nagyon hasonló a HTML -hez. Az XML teljes mértékben az adatok tárolására és továbbítására összpontosít, míg a HTML az adatok böngészőben történő megjelenítésére szolgál.







Minta XML fájl/XML szintaxis

Íme egy minta XML fájl:



változat='1.0' kódolás='utf-8'?>

>

tanuló_típusa='Részidő'>

>Tom>

>

tanuló_típusa='Teljes idő'>

>Gácsér>

>

>

A HTML-től eltérően ez egy címkeorientált jelölőnyelv, és saját címkét határozhatunk meg egy XML fájlban. A fenti példában számos felhasználó által definiált címke található, mint például. Minden címke a megfelelő végcímkével rendelkezik. a befejező címke. Annyi felhasználó által definiált címkét definiálhatunk, ahány adatot szeretnénk rendezni.



Könyvtárak elemzése C ++ nyelven:

A legtöbb magas szintű programozási nyelvben különféle könyvtárak vannak az XML adatok elemzésére. A C ++ sem kivétel. Íme a legnépszerűbb C ++ könyvtárak az XML adatok elemzéséhez:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Ahogy a neve is sugallja, a RapidXML elsősorban a sebességre összpontosít, és ez egy DOM stílusú elemző könyvtár. A PugiXML támogatja az Unicode konvertálást. Használhatja a PugiXML-t, ha az UTF-16 dokumentumot UTF-8-ra szeretné konvertálni. A TinyXML egy minimális verzió az XML adatok elemzésére, és nem olyan gyors, mint az előző kettő. Ha csak elvégezni szeretné a munkát, és nem törődik a sebességgel, akkor válassza a TinyXML -t.

Példák
Most alapvető ismereteink vannak az XML és XML elemző könyvtárakról a C ++ nyelven. Nézzünk most néhány példát az xml fájl C ++ nyelvű elemzésére:



  • 1. példa: XML elemzése C ++ nyelven RapidXML használatával
  • 2. példa: XML elemzése C ++ nyelven PugiXML használatával
  • 3. példa: XML elemzése C ++ nyelven TinyXML használatával

Ezen példák mindegyikében a megfelelő könyvtárakat használjuk egy minta XML fájl elemzésére.

1. példa: XML elemzése C ++ nyelven RapidXML használatával

Ebben a példaprogramban bemutatjuk, hogyan kell elemezni az xml -t a RapidXML könyvtár használatával C ++ nyelven. Itt található a bemeneti XML fájl (sample.xml):

változat='1.0' kódolás='utf-8'?>

>

tanuló_típusa='Részidő'>

>János>

>

tanuló_típusa='Teljes idő'>

>Sean>

>

tanuló_típusa='Részidő'>

>Sára>

>

>

Célunk a fenti XML fájl C ++ használatával történő elemzése. Itt található a C ++ program az XML adatok RapidXML használatával történő elemzésére. A RapidXML könyvtárat innen töltheti le Itt .

#befoglalni
#befoglalni
#befoglalni
#include 'rapidxml.hpp'

segítségével névtérórák;
segítségével névtérrapidxml;


xml_dokumentumdok
xml_node *root_node= NULLA;

intfő-(üres)
{
költség << ' nTanulóim adatainak elemzése (sample.xml) ..... ' <<endl;

// Olvassa el a sample.xml fájlt
ifstream a fájl('sample.xml');
vektor<char>puffer((istreambuf_iterator<char>(a fájl)), istreambuf_iterator<char>());
puffer.visszavet(' 0');

// A puffer elemzése
dok.elemezni<0>(&puffer[0]);

// Keresse meg a gyökércsomópontot
root_node=dok.first_node('MyStudentsData');

// Ismételje meg a diákcsomópontokat
számára (xml_node *tanuló_csomópont=root_node->first_node('Diák');tanuló_csomópont;tanuló_csomópont=tanuló_csomópont->next_sibling())
{
költség << ' nDiák típusa = ' <<tanuló_csomópont->first_attribute('tanuló_típus')->érték();
költség <<endl;

// Interakció a diáknevek felett
számára(xml_node *tanuló_neve_csomópont=tanuló_csomópont->first_node('Név');tanuló_neve_csomópont;tanuló_neve_csomópont=tanuló_neve_csomópont->next_sibling())
{
költség << 'Diák neve =' <<tanuló_neve_csomópont->érték();
költség <<endl;
}
költség <<endl;
}

Visszatérés 0;
}

2. példa: XML elemzése C ++ nyelven PugiXML használatával

Ebben a példaprogramban bemutatjuk, hogyan kell elemezni az xml -t a PugiXML könyvtár használatával C ++ nyelven. Itt található a bemeneti XML fájl (sample.xml):

változat='1.0' kódolás='UTF-8' önálló='nem' ?>

FormatVersion='1'>

>

Név='János' típus='Részidő'>

>

Név='Sean' típus='Teljes idő'>

>

Név='Sára' típus='Részidő'>

>

>

>

Ebben a példaprogramban bemutatjuk, hogyan kell elemezni az xml -t a pugixml könyvtár használatával C ++ nyelven. A PugiXML könyvtárat innen töltheti le Itt .

#befoglalni
#include 'pugixml.hpp'

segítségével névtérórák;
segítségével névtérpugi;

intfő-()
{
költség << ' nAz alkalmazottak adatainak elemzése (sample.xml) ..... n n';


xml_document doc;

// az XML fájl betöltése
ha (!dok.load_file('sample.xml')) Visszatérés -1;

xml_node eszközök=dok.gyermek('Alkalmazottak adatai').gyermek('Munkavállalók');


számára (xml_node_iterator meg=eszközöket.kezdődik();azt!=eszközöket.vége(); ++azt)
{
költség << 'Alkalmazottak:';

számára (xml_attribute_iterator ait=azt->attributes_begin();tartozó!=azt->attributes_end(); ++tartozó)
{
költség << '' <<tartozó->név() << '=' <<tartozó->érték();
}

költség <<endl;
}

költség <<endl;

Visszatérés 0;

}

3. példa: XML elemzése C ++ nyelven TinyXML használatával

Ebben a példaprogramban bemutatjuk, hogyan kell elemezni az xml -t a TinyXML könyvtár használatával C ++ nyelven. Itt található a bemeneti XML fájl (sample.xml):

változat='1.0' kódolás='utf-8'?>

>

>János>

>Sean>

>Sára>

>

Ebben a példaprogramban bemutatjuk, hogyan kell elemezni az xml -t a TinyXML könyvtár használatával C ++ nyelven. A TinyXML könyvtárat innen töltheti le Itt .

#befoglalni
#befoglalni
#befoglalni
#include 'tinyxml2.cpp'

segítségével névtérórák;
segítségével névtértinyxml2;


intfő-(üres)
{
költség << ' nTanulóim adatainak elemzése (sample.xml) ..... ' <<endl;

// Olvassa el a sample.xml fájlt
XMLDokumentum dok;
dok.LoadFile( 'sample.xml' );

const char*cím=dok.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Diák' )->GetText();
printf( 'Diák neve: %s n', cím);


XMLText*textNode=dok.UtolsóGyermekElem( 'MyStudentsData' )->UtolsóGyermekElem( 'Diák' )->Első gyerek()->Üzenni();
cím=textNode->Érték();
printf( 'Diák neve: %s n', cím);


Visszatérés 0;
}

Következtetés

Ebben a cikkben röviden tárgyaltunk XML és megvizsgált három különböző példát az XML elemzésére C ++ nyelven. A TinyXML egy minimalista könyvtár az XML adatok elemzésére. A legtöbb programozó főként a RapidXML -t vagy a PugiXML -t használja az XML adatok elemzéséhez.