Jak parsować XML w C++

How Parse Xml C



W tym artykule omówimy, jak parsować XML w języku programowania C++. Zobaczymy kilka działających przykładów, aby zrozumieć mechanizm parsowania XML w C++.

Co to jest XML?

XML jest językiem znaczników i służy głównie do przechowywania i przesyłania danych w zorganizowany sposób. XML oznacza eXtensible Markup Language. Jest bardzo podobny do HTML. XML jest całkowicie skoncentrowany na przechowywaniu i przesyłaniu danych, podczas gdy HTML służy do wyświetlania danych w przeglądarce.







Przykładowy plik XML/składnia XML

Oto przykładowy plik XML:



wersja=„1.0” kodowanie=„utf-8”?>

>

typ_ucznia=„W niepełnym wymiarze godzin”>

>Tomek>

>

typ_ucznia='Pełny etat'>

>Kaczor>

>

>

W przeciwieństwie do HTML, jest to język znaczników zorientowany na znaczniki i możemy zdefiniować własny znacznik w pliku XML. W powyższym przykładzie mamy kilka zdefiniowanych przez użytkownika tagów, takich jak . Każdy tag będzie miał odpowiadający mu tag końcowy. jest końcowym tagiem dla . Możemy zdefiniować tyle tagów zdefiniowanych przez użytkownika, ile chcemy uporządkować dane.



Parsowanie bibliotek w C++:

Istnieją różne biblioteki do analizowania danych XML w większości języków programowania wysokiego poziomu. C++ nie jest wyjątkiem. Oto najpopularniejsze biblioteki C++ do analizowania danych XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Jak sama nazwa wskazuje, RapidXML koncentruje się głównie na szybkości i jest biblioteką analizującą styl DOM. PugiXML obsługuje konwersję Unicode. Możesz użyć PugiXML, jeśli chcesz przekonwertować dokument UTF-16 na UTF-8. TinyXML to minimalna wersja do analizowania danych XML i nie tak szybka w porównaniu z poprzednimi dwoma. Jeśli chcesz po prostu wykonać swoją pracę i nie zależy Ci na szybkości, możesz wybrać TinyXML.

Przykłady
Teraz mamy podstawową wiedzę na temat bibliotek analizujących XML i XML w C++. Przyjrzyjmy się teraz kilku przykładom parsowania pliku xml w C++:



  • Przykład-1: Parsowanie XML w C++ przy użyciu RapidXML
  • Przykład 2: Parsowanie XML w C++ przy użyciu PugiXML
  • Przykład-3: Parsowanie XML w C++ przy użyciu TinyXML

W każdym z tych przykładów użyjemy odpowiednich bibliotek do przeanalizowania przykładowego pliku XML.

Przykład-1: Parsowanie XML w C++ przy użyciu RapidXML

W tym przykładowym programie zademonstrujemy, jak parsować xml za pomocą biblioteki RapidXML w C++. Oto wejściowy plik XML (sample.xml):

wersja=„1.0” kodowanie=„utf-8”?>

>

typ_ucznia=„W niepełnym wymiarze godzin”>

>Jan>

>

typ_ucznia='Pełny etat'>

>Sean>

>

typ_ucznia=„W niepełnym wymiarze godzin”>

>Sara>

>

>

Naszym celem jest przeanalizowanie powyższego pliku XML przy użyciu C++. Oto program C++ do analizowania danych XML za pomocą RapidXML. Bibliotekę RapidXML można pobrać z Tutaj .

#włączać
#włączać
#włączać
#dołącz „rapidxml.hpp”

za pomocą przestrzeń nazwgodziny;
za pomocą przestrzeń nazwszybkixml;


xml_documentdoktor
xml_node *Węzeł główny= ZERO;

intGłówny(próżnia)
{
koszt << ' Przetwarzam dane moich uczniów (sample.xml).....” <<koniec;

// Odczytaj plik sample.xml
ifstream theFile(„przykład.xml”);
wektor<zwęglać>bufor((istreambuf_iterator<zwęglać>(plik)), istreambuf_iterator<zwęglać>());
bufor.push_back(' 0');

// Przeanalizuj bufor
dok.analizować<0>(&bufor[0]);

// Znajdź węzeł główny
Węzeł główny=dok.pierwszy_węzeł(„MojeDane Uczniów”);

// Iteruj po węzłach ucznia
dla (xml_node *węzeł_studenta=Węzeł główny->pierwszy_węzeł('Student');węzeł_studenta;węzeł_studenta=węzeł_studenta->następne_rodzeństwo())
{
koszt << ' Typ ucznia = ' <<węzeł_studenta->pierwszy_atrybut(„typ_ucznia”)->wartość();
koszt <<koniec;

// Interakcja nad imionami uczniów
dla(xml_node *Student_name_node=węzeł_studenta->pierwszy_węzeł('Nazwa');Student_name_node;Student_name_node=Student_name_node->następne_rodzeństwo())
{
koszt << 'Nazwisko ucznia = ' <<Student_name_node->wartość();
koszt <<koniec;
}
koszt <<koniec;
}

powrót 0;
}

Przykład 2: Parsowanie XML w C++ przy użyciu PugiXML

W tym przykładowym programie zademonstrujemy, jak parsować xml przy użyciu biblioteki PugiXML w C++. Oto wejściowy plik XML (sample.xml):

wersja=„1.0” kodowanie=„UTF-8” samodzielny='nie' ?>

Wersja formatu=„1”>

>

Nazwa='Jan' Rodzaj=„W niepełnym wymiarze godzin”>

>

Nazwa=„Sean” Rodzaj='Pełny etat'>

>

Nazwa=„Sara” Rodzaj=„W niepełnym wymiarze godzin”>

>

>

>

W tym przykładowym programie zademonstrujemy, jak parsować xml za pomocą biblioteki pugixml w C++. Możesz pobrać bibliotekę PugiXML z Tutaj .

#włączać
#dołącz „pugixml.hpp”

za pomocą przestrzeń nazwgodziny;
za pomocą przestrzeń nazwpugi;

intGłówny()
{
koszt << ' Parsowanie danych pracowników (sample.xml)..... ';


dokument xml_document;

// załaduj plik XML
Jeśli (!dok.Załaduj plik(„przykład.xml”)) powrót -1;

narzędzia xml_node=dok.dziecko(„Dane Pracowników”).dziecko('Pracowników');


dla (xml_node_iterator to=narzędzia.rozpocząć();to!=narzędzia.kończyć się(); ++to)
{
koszt << 'Pracowników:';

dla (xml_attribute_iterator ait=to->atrybuty_początek();należący!=to->atrybuty_koniec(); ++należący)
{
koszt << '' <<należący->Nazwa() << '=' <<należący->wartość();
}

koszt <<koniec;
}

koszt <<koniec;

powrót 0;

}

Przykład-3: Parsowanie XML w C++ przy użyciu TinyXML

W tym przykładowym programie zademonstrujemy, jak parsować xml za pomocą biblioteki TinyXML w C++. Oto wejściowy plik XML (sample.xml):

wersja=„1.0” kodowanie=„utf-8”?>

>

>Jan>

>Sean>

>Sara>

>

W tym przykładowym programie zademonstrujemy, jak parsować xml za pomocą biblioteki TinyXML w C++. Możesz pobrać bibliotekę TinyXML z Tutaj .

#włączać
#włączać
#włączać
#dołącz „tinyxml2.cpp”

za pomocą przestrzeń nazwgodziny;
za pomocą przestrzeń nazwtinyxml2;


intGłówny(próżnia)
{
koszt << ' Przetwarzam dane moich uczniów (sample.xml).....” <<koniec;

// Odczytaj plik sample.xml
Dokument XMLDokument;
dok.Załaduj plik( „przykład.xml” );

stały zwęglać*tytuł=dok.Pierwszy element potomny( „MojeDane Uczniów” )->Pierwszy element potomny( 'Student' )->Pobierz tekst();
printf( 'Nazwisko ucznia: %s ', tytuł);


Tekst XML*textNode=dok.Ostatni element potomny( „MojeDane Uczniów” )->Ostatni element potomny( 'Student' )->Pierworodny()->Pisać();
tytuł=textNode->Wartość();
printf( 'Nazwisko ucznia: %s ', tytuł);


powrót 0;
}

Wniosek

W tym artykule krótko omówiliśmy XML i przyjrzeliśmy się trzem różnym przykładom parsowania XML w C++. TinyXML to minimalistyczna biblioteka do analizowania danych XML. Większość programistów używa głównie RapidXML lub PugiXML do analizowania danych XML.