Hur man analyserar XML i C ++

How Parse Xml C



I den här artikeln kommer vi att diskutera hur man analyserar XML i programmeringsspråk C ++. Vi kommer att se flera fungerande exempel för att förstå XML -analysmekanismen i C ++.

Vad är XML?

XML är ett markeringsspråk och används främst för att lagra och överföra data på ett organiserat sätt. XML står för eXtensible Markup Language. Det liknar mycket HTML. XML är helt fokuserad på att lagra och överföra data, medan HTML används för att visa data i webbläsaren.







Ett exempel på XML -fil/XML -syntax

Här är ett exempel på en XML -fil:



version='1.0' kodning='utf-8'?>

>

student_typ='Deltid'>

>Tom>

>

student_typ='Heltid'>

>Ankbonde>

>

>

Till skillnad från HTML är det ett tag-orienterat markeringsspråk, och vi kan definiera vår egen tagg i en XML-fil. I exemplet ovan har vi flera användardefinierade taggar som t.ex. Varje tagg kommer att ha motsvarande sluttagg. är sluttaggen för. Vi kan definiera så många användardefinierade taggar som vi vill organisera data.



Analysera bibliotek i C ++:

Det finns olika bibliotek för att analysera XML-data på de flesta programmeringsspråk på hög nivå. C ++ är inget undantag. Här är de mest populära C ++ - biblioteken för att analysera XML -data:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Som namnet antyder fokuserar RapidXML huvudsakligen på hastighet, och det är ett analyseringsbibliotek i DOM -stil. PugiXML stöder Unicode -konvertering. Du kanske vill använda PugiXML om du vill konvertera UTF-16 doc till UTF-8. TinyXML är en minimal version för att analysera XML-data och inte så snabbt jämfört med de två föregående. Om du bara vill göra jobbet och inte bryr dig om hastigheten kan du välja TinyXML.

Exempel
Nu har vi en grundläggande förståelse för XML- och XML -analysbibliotek i C ++. Låt oss nu titta på ett par exempel för att analysera xml -fil i C ++:



  • Exempel-1: Analysera XML i C ++ med RapidXML
  • Exempel 2: Analysera XML i C ++ med PugiXML
  • Exempel 3: Analysera XML i C ++ med TinyXML

I vart och ett av dessa exempel kommer vi att använda respektive bibliotek för att analysera en XML -fil.

Exempel-1: Analysera XML i C ++ med RapidXML

I detta exempelprogram kommer vi att visa hur man analyserar xml med RapidXML -biblioteket i C ++. Här är XML -filen (sample.xml):

version='1.0' kodning='utf-8'?>

>

student_typ='Deltid'>

>John>

>

student_typ='Heltid'>

>Sean>

>

student_typ='Deltid'>

>Sarah>

>

>

Vårt mål här är att analysera ovanstående XML -fil med C ++. Här är C ++ - programmet för att analysera XML -data med RapidXML. Du kan ladda ner RapidXML -biblioteket från Här .

#omfatta
#omfatta
#omfatta
#inkludera 'rapidxml.hpp'

använder sig av namnrymdtimmar;
använder sig av namnrymdrapidxml;


xml_documentdoc
xml_node *root_node= NULL;

inthuvud(tomhet)
{
kosta << ' nAnalysera mina elevers data (sample.xml) ..... ' <<endl;

// Läs filen sample.xml
ifstream filen('sample.xml');
vektor<röding>buffert((istreambuf_iterator<röding>(filen)), istreambuf_iterator<röding>());
buffert.trycka tillbaka(' 0');

// Analysera bufferten
doc.analysera<0>(&buffert[0]);

// Ta reda på rotnoden
root_node=doc.first_node('MyStudentsData');

// Iterera över studentnoderna
för (xml_node *student_nod=root_node->first_node('Studerande');student_nod;student_nod=student_nod->nästa_sibling())
{
kosta << ' nStudenttyp = ' <<student_nod->första_attribut('student_type')->värde();
kosta <<endl;

// Interagera över studentnamnen
för(xml_node *student_name_node=student_nod->first_node('Namn');student_name_node;student_name_node=student_name_node->nästa_sibling())
{
kosta << 'Studentnamn =' <<student_name_node->värde();
kosta <<endl;
}
kosta <<endl;
}

lämna tillbaka 0;
}

Exempel 2: Analysera XML i C ++ med PugiXML

I detta exempelprogram kommer vi att demonstrera hur man analyserar xml med hjälp av PugiXML -biblioteket i C ++. Här är XML -filen (sample.xml):

version='1.0' kodning='UTF-8' fristående='Nej' ?>

FormatVersion='1'>

>

namn='John' Typ='Deltid'>

>

namn='Sean' Typ='Heltid'>

>

namn='Sarah' Typ='Deltid'>

>

>

>

I detta exempelprogram kommer vi att visa hur man analyserar xml med hjälp av pugixml -biblioteket i C ++. Du kan ladda ner PugiXML -biblioteket från Här .

#omfatta
#inkludera 'pugixml.hpp'

använder sig av namnrymdtimmar;
använder sig av namnrymdpugi;

inthuvud()
{
kosta << ' nAnalysera anställdas data (exempel.xml) ..... n n';


xml_document doc;

// ladda XML -filen
om (!doc.load_file('sample.xml')) lämna tillbaka -1;

xml_node -verktyg=doc.barn('AnställdaData').barn('Anställda');


för (xml_node_iterator det=verktyg.Börja();den!=verktyg.slutet(); ++den)
{
kosta << 'Anställda:';

för (xml_attribute_iterator ait=den->attribut_start();som tillhör!=den->attributes_end(); ++som tillhör)
{
kosta << '' <<som tillhör->namn() << '=' <<som tillhör->värde();
}

kosta <<endl;
}

kosta <<endl;

lämna tillbaka 0;

}

Exempel 3: Analysera XML i C ++ med TinyXML

I detta exempelprogram kommer vi att visa hur man analyserar xml med hjälp av TinyXML -biblioteket i C ++. Här är XML -filen (sample.xml):

version='1.0' kodning='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

I detta exempelprogram kommer vi att visa hur man analyserar xml med hjälp av TinyXML -biblioteket i C ++. Du kan ladda ner TinyXML -biblioteket från Här .

#omfatta
#omfatta
#omfatta
#inkludera 'tinyxml2.cpp'

använder sig av namnrymdtimmar;
använder sig av namnrymdtinyxml2;


inthuvud(tomhet)
{
kosta << ' nAnalysera mina elevers data (sample.xml) ..... ' <<endl;

// Läs filen sample.xml
XMLDocument doc;
doc.LoadFile( 'sample.xml' );

konst röding*titel=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Studerande' )->GetText();
printf( 'Studentnamn: %s n', titel);


XMLText*textNode=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Studerande' )->Förstfödde()->Att sms: a();
titel=textNode->Värde();
printf( 'Studentnamn: %s n', titel);


lämna tillbaka 0;
}

Slutsats

I denna artikel har vi kort diskuterat XML och tittade på tre olika exempel på hur man analyserar XML i C ++. TinyXML är ett minimalistiskt bibliotek för analys av XML -data. De flesta programmerare använder huvudsakligen RapidXML eller PugiXML för att analysera XML -data.