Paano Ma-parse ang XML sa C ++

How Parse Xml C



Sa artikulong ito, tatalakayin namin kung paano mai-parse ang XML sa wika ng pagprograma ng C ++. Makakakita kami ng maraming mga gumaganang halimbawa upang maunawaan ang mekanismo ng pag-parse ng XML sa C ++.

Ano ang XML?

XML ay isang markup na wika at pangunahing ginagamit para sa pagtatago at paglilipat ng data sa isang organisadong paraan. Ang XML ay nangangahulugang eXtensible Markup Language. Ito ay halos kapareho sa HTML. Ang XML ay ganap na nakatuon sa pagtatago at paglilipat ng data, samantalang ang HTML ay ginagamit para sa pagpapakita ng data sa browser.







Isang Sample na XML File / XML Syntax

Narito ang isang sample na XML file:



bersyon='1.0' pag-encode='utf-8'?>

>

estudyante_type='Part-time'>

>Tom>

>

estudyante_type='Buong oras'>

>Drake>

>

>

Hindi tulad ng HTML, Ito ay isang tag-oriented na markup na wika, at maaari nating tukuyin ang aming sariling tag sa isang XML file. Sa halimbawa sa itaas, mayroon kaming maraming mga tag na tinukoy ng gumagamit tulad ng. Ang bawat tag ay magkakaroon ng kaukulang tag ng pagtatapos. ang nagtatapos na tag para sa. Maaari naming tukuyin ang maraming mga tag na tinukoy ng gumagamit hangga't nais naming ayusin ang data.



Mga Parsing Library sa C ++:

Mayroong iba't ibang mga silid-aklatan upang mai-parse ang data ng XML sa karamihan ng mga mataas na antas na mga wika ng programa. Ang C ++ ay hindi isang pagbubukod. Narito ang pinakatanyag na mga aklatan ng C ++ upang mai-parse ang data ng XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Tulad ng ipinahihiwatig ng pangalan, ang RapidXML ay pangunahing nakatuon sa bilis, at ito ay isang library ng pag-parse ng estilo ng DOM. Sinusuportahan ng PugiXML ang conversion ng Unicode. Maaaring gusto mong gamitin ang PugiXML kung nais mong i-convert ang UTF-16 doc sa UTF-8. Ang TinyXML ay isang hubad-minimum na bersyon upang mai-parse ang data ng XML at hindi ganoon kabilis kumpara sa nakaraang dalawa. Kung nais mong matapos lamang ang trabaho at hindi alintana ang bilis, maaari kang pumili ng TinyXML.

Mga halimbawa
Ngayon, mayroon kaming pangunahing pag-unawa sa mga library ng pag-parse ng XML at XML sa C ++. Tingnan natin ngayon ang isang pares ng mga halimbawa upang ma-parse ang xml file sa C ++:



  • Halimbawa-1: Parse XML sa C ++ gamit ang RapidXML
  • Halimbawa-2: Parse XML sa C ++ gamit ang PugiXML
  • Halimbawa-3: Parse XML sa C ++ gamit ang TinyXML

Sa bawat isa sa mga halimbawang ito, gagamitin namin ang kani-kanilang mga aklatan upang ma-parse ang isang sample na XML file.

Halimbawa-1: Parse XML sa C ++ gamit ang RapidXML

Sa halimbawang programa na ito, ipapakita namin kung paano i-parse ang xml gamit ang RapidXML library sa C ++. Narito ang input XML file (sample.xml):

bersyon='1.0' pag-encode='utf-8'?>

>

estudyante_type='Part-time'>

>John>

>

estudyante_type='Buong oras'>

>Sean>

>

estudyante_type='Part-time'>

>Sarah>

>

>

Ang aming layunin dito ay upang mai-parse ang XML file sa itaas gamit ang C ++. Narito ang programa ng C ++ upang mai-parse ang data ng XML gamit ang RapidXML. Maaari mong i-download ang RapidXML library mula sa Dito .

# isama
# isama
# isama
# isama ang 'rapidxml.hpp'

gamit namespaceoras;
gamit namespacequickxml;


xml_documentdok
xml_node *root_node= WALA;

intpangunahing(walang bisa)
{
gastos << ' nParsing data ng aking mga mag-aaral (sample.xml) ..... ' <<endl;

// Basahin ang sample.xml file
ifstream theFile('sample.xml');
vector<char>buffer((istreambuf_iterator<char>(angFile)), istreambuf_iterator<char>());
bufferpush_back(' 0');

// Parse the buffer
dok.parse<0>(&buffer[0]);

// Alamin ang root node
root_node=dok.first_node('MyStudentsData');

// Iterate over the student nodes
para sa (xml_node *mag-aaral_node=root_node->first_node('Mag-aaral');mag-aaral_node;mag-aaral_node=mag-aaral_node->susunod_sibling())
{
gastos << ' nUri ng Mag-aaral = ' <<mag-aaral_node->first_attribute('student_type')->halaga();
gastos <<endl;

// Makisalamuha sa Mga Pangalan ng Mag-aaral
para sa(xml_node *student_name_node=mag-aaral_node->first_node('Pangalan');student_name_node;student_name_node=student_name_node->susunod_sibling())
{
gastos << 'Pangalan ng Mag-aaral =' <<student_name_node->halaga();
gastos <<endl;
}
gastos <<endl;
}

bumalik ka 0;
}

Halimbawa-2: Parse XML sa C ++ gamit ang PugiXML

Sa halimbawang programa na ito, ipapakita namin kung paano i-parse ang xml gamit ang PugiXML library sa C ++. Narito ang input XML file (sample.xml):

bersyon='1.0' pag-encode='UTF-8' mag-isa='hindi' ?>

FormatVersion='1'>

>

Pangalan='John' Uri='Part-Time'>

>

Pangalan='Sean' Uri='Buong Oras'>

>

Pangalan='Sarah' Uri='Part-Time'>

>

>

>

Sa halimbawang programa na ito, ipapakita namin kung paano i-parse ang xml gamit ang pugixml library sa C ++. Maaari mong i-download ang PugiXML library mula sa Dito .

# isama
# isama ang 'pugixml.hpp'

gamit namespaceoras;
gamit namespacepugi;

intpangunahing()
{
gastos << ' nParsing data ng mga empleyado (sample.xml) ..... n n';


xml_document doc;

// load ang XML file
kung (!dok.load_file('sample.xml')) bumalik ka -1;

xml_node tool=dok.anak('Mga empleyado ng Data').anak('Mga empleyado');


para sa (xml_node_iterator ito=mga kasangkapanmagsimula();ito!=mga kasangkapanmagtapos(); ++ito)
{
gastos << 'Mga empleyado:';

para sa (xml_attribut_iterator ait=ito->mga katangiang_begin();pagmamay-ari!=ito->mga katangian_end(); ++pagmamay-ari)
{
gastos << ' <<pagmamay-ari->pangalan() << '=' <<pagmamay-ari->halaga();
}

gastos <<endl;
}

gastos <<endl;

bumalik ka 0;

}

Halimbawa-3: Parse XML sa C ++ gamit ang TinyXML

Sa halimbawang programa na ito, ipapakita namin kung paano i-parse ang xml gamit ang TinyXML library sa C ++. Narito ang input XML file (sample.xml):

bersyon='1.0' pag-encode='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

Sa halimbawang programa na ito, ipapakita namin kung paano i-parse ang xml gamit ang TinyXML library sa C ++. Maaari mong i-download ang TinyXML library mula sa Dito .

# isama
# isama
# isama
# isama ang 'tinyxml2.cpp'

gamit namespaceoras;
gamit namespacetinyxml2;


intpangunahing(walang bisa)
{
gastos << ' nParsing data ng aking mga mag-aaral (sample.xml) ..... ' <<endl;

// Basahin ang sample.xml file
XMLDocument doc;
dok.LoadFile( 'sample.xml' );

Const char*pamagat=dok.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Mag-aaral' )->GetText();
printf( 'Pangalan ng Mag-aaral:% s n', pamagat);


XMLText*textNode=dok.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Mag-aaral' )->Unang anak()->ToText();
pamagat=textNode->Halaga();
printf( 'Pangalan ng Mag-aaral:% s n', pamagat);


bumalik ka 0;
}

Konklusyon

Sa artikulong ito, maikling tinalakay namin XML at tiningnan ang tatlong magkakaibang mga halimbawa ng kung paano mai-parse ang XML sa C ++. Ang TinyXML ay isang minimalistic library para sa pag-parse ng data ng XML. Karamihan sa mga programmer pangunahing ginagamit ang RapidXML o PugiXML upang ma-parse ang data ng XML.