Jak analyzovat XML v C ++

How Parse Xml C



V tomto článku budeme diskutovat o tom, jak analyzovat XML v programovacím jazyce C ++. Uvidíme několik pracovních příkladů, abychom porozuměli mechanismu analýzy XML v C ++.

Co je XML?

XML je značkovací jazyk a používá se hlavně k organizovanému ukládání a přenosu dat. XML znamená eXtensible Markup Language. Je velmi podobný HTML. XML je zcela zaměřeno na ukládání a přenos dat, zatímco HTML se používá k zobrazení dat v prohlížeči.







Ukázka syntaxe souboru XML/XML

Zde je ukázkový soubor XML:



verze='1,0' kódování='utf-8'?>

>

student_type='Poloviční úvazek'>

>Tom>

>

student_type='Plný úvazek'>

>Kačer>

>

>

Na rozdíl od HTML je to značkovací jazyk orientovaný na značky a vlastní značku můžeme definovat v souboru XML. Ve výše uvedeném příkladu máme několik uživatelsky definovaných značek, jako například. Každá značka bude mít odpovídající koncovou značku. je koncová značka pro. Můžeme definovat tolik uživatelsky definovaných značek, kolik chceme data uspořádat.



Analýza knihoven v C ++:

Ve většině programovacích jazyků na vysoké úrovni existují různé knihovny pro analýzu dat XML. C ++ není výjimkou. Zde jsou nejoblíbenější knihovny C ++ pro analýzu dat XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Jak název napovídá, RapidXML je zaměřen hlavně na rychlost a je to knihovna pro analýzu stylu DOM. PugiXML podporuje převod Unicode. Pokud chcete převést dokument UTF-16 na UTF-8, můžete použít PugiXML. TinyXML je verzí pro analýzu dat XML a není tak rychlá ve srovnání s předchozími dvěma. Pokud chcete práci dokončit a nezáleží vám na rychlosti, můžete si vybrat TinyXML.

Příklady
Nyní máme základní znalosti o knihovnách XML a analýzy XML v C ++. Podívejme se nyní na několik příkladů k analýze souboru xml v C ++:



  • Příklad 1: Analyzujte XML v C ++ pomocí RapidXML
  • Příklad 2: Analyzujte XML v C ++ pomocí PugiXML
  • Příklad 3: Analyzujte XML v C ++ pomocí TinyXML

V každém z těchto příkladů použijeme příslušné knihovny k analýze ukázkového souboru XML.

Příklad 1: Analyzujte XML v C ++ pomocí RapidXML

V tomto ukázkovém programu si ukážeme, jak analyzovat xml pomocí knihovny RapidXML v C ++. Zde je vstupní soubor XML (sample.xml):

verze='1,0' kódování='utf-8'?>

>

student_type='Poloviční úvazek'>

>John>

>

student_type='Plný úvazek'>

>Sean>

>

student_type='Poloviční úvazek'>

>Sarah>

>

>

Naším cílem je analyzovat výše uvedený soubor XML pomocí C ++. Zde je program C ++ pro analýzu dat XML pomocí RapidXML. Knihovnu RapidXML si můžete stáhnout z Tady .

#zahrnout
#zahrnout
#zahrnout
#include 'rapidxml.hpp'

použitím jmenný prostorhodiny;
použitím jmenný prostorrapidxml;


xml_documentdoc
xml_node *kořenový_uzel= NULA;

inthlavní(prázdné)
{
náklady << ' nAnalýza dat mých studentů (sample.xml) ..... ' <<endl;

// Přečtěte si soubor sample.xml
ifstreamsoubor('sample.xml');
vektor<char>vyrovnávací paměť((istreambuf_iterator<char>(soubor)), istreambuf_iterator<char>());
vyrovnávací paměť.zatlačit zpátky(' 0');

// Analyzujte vyrovnávací paměť
doc.analyzovat<0>(&vyrovnávací paměť[0]);

// Zjistěte kořenový uzel
kořenový_uzel=doc.první_uzel('MyStudentsData');

// Opakujte přes studentské uzly
pro (xml_node *student_node=kořenový_uzel->první_uzel('Student');student_node;student_node=student_node->next_sibling())
{
náklady << ' nTyp studenta = ' <<student_node->first_attribute('student_type')->hodnota();
náklady <<endl;

// Interate over the Jména studentů
pro(xml_node *student_name_node=student_node->první_uzel('Název');student_name_node;student_name_node=student_name_node->next_sibling())
{
náklady << 'Student Name =' <<student_name_node->hodnota();
náklady <<endl;
}
náklady <<endl;
}

vrátit se 0;
}

Příklad 2: Analyzujte XML v C ++ pomocí PugiXML

V tomto ukázkovém programu si ukážeme, jak analyzovat xml pomocí knihovny PugiXML v C ++. Zde je vstupní soubor XML (sample.xml):

verze='1,0' kódování='UTF-8' samostatný='Ne' ?>

FormatVersion='1'>

>

název='John' Typ='Poloviční úvazek'>

>

název='Sean' Typ='Plný úvazek'>

>

název='Sarah' Typ='Poloviční úvazek'>

>

>

>

V tomto ukázkovém programu si ukážeme, jak analyzovat xml pomocí knihovny pugixml v C ++. Knihovnu PugiXML si můžete stáhnout z Tady .

#zahrnout
#include 'pugixml.hpp'

použitím jmenný prostorhodiny;
použitím jmenný prostorpugi;

inthlavní()
{
náklady << ' nAnalýza dat zaměstnanců (sample.xml) ... n n';


xml_document doc;

// načtení souboru XML
-li (!doc.load_file('sample.xml')) vrátit se -1;

xml_node nástroje=doc.dítě('Data zaměstnanců').dítě('Zaměstnanci');


pro (xml_node_iterator to=nástroje.začít();to!=nástroje.konec(); ++to)
{
náklady << 'Zaměstnanci:';

pro (xml_attribute_iterator ait=to->atributy_začít();patřící!=to->atributy_konec(); ++patřící)
{
náklady << '' <<patřící->název() << '=' <<patřící->hodnota();
}

náklady <<endl;
}

náklady <<endl;

vrátit se 0;

}

Příklad 3: Analyzujte XML v C ++ pomocí TinyXML

V tomto ukázkovém programu si ukážeme, jak analyzovat xml pomocí knihovny TinyXML v C ++. Zde je vstupní soubor XML (sample.xml):

verze='1,0' kódování='utf-8'?>

>

>John>

>Sean>

>Sarah>

>

V tomto ukázkovém programu si ukážeme, jak analyzovat xml pomocí knihovny TinyXML v C ++. Knihovnu TinyXML si můžete stáhnout z Tady .

#zahrnout
#zahrnout
#zahrnout
#include 'tinyxml2.cpp'

použitím jmenný prostorhodiny;
použitím jmenný prostortinyxml2;


inthlavní(prázdné)
{
náklady << ' nAnalýza dat mých studentů (sample.xml) ..... ' <<endl;

// Přečtěte si soubor sample.xml
Dokument XMLDoc;
doc.LoadFile( 'sample.xml' );

konst char*titul=doc.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Student' )->GetText();
printf( „Jméno studenta: %s n', titul);


XMLText*textový uzel=doc.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Student' )->První dítě()->Napsat();
titul=textový uzel->Hodnota();
printf( „Jméno studenta: %s n', titul);


vrátit se 0;
}

Závěr

V tomto článku jsme krátce diskutovali XML a podíval se na tři různé příklady, jak analyzovat XML v C ++. TinyXML je minimalistická knihovna pro analýzu dat XML. Většina programátorů používá k analýze dat XML hlavně RapidXML nebo PugiXML.