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”?>
>
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:
- RapidXML
- PugiXML
- 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”?>>
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' ?>>
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”?>>
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.