Qt - tworzenie, zapisywanie i odczytywanie danych zapisanych w formacie XML
Stronę tą wyświetlono już: 2830 razy
XML (rozszerzony język znaczników) to format zapisu danych w formie tekstu, który jest bardzo często wykorzystywany do zapisu danych. Najbardziej znanym wykorzystaniem tego formatu jest HTML wykorzystywany przez strony internetowe do formatowania danych i wyglądu strony. XML jest także wykorzystywany przez wiele innych aplikacji takich jak np. Inkscape, który do zapisu danych i ich formatowania wykorzystuje w przebiegły sposób format XML. Z tego względu warto wiedzieć co nieco o tym formacie danych i możliwości jego wykorzystania.
Prosty przykład kodu XML
Rzućmy łaskawym okiem na taki oto prosty kawałek kodu:
Dokumenty XML mają strukturę drzewiastą, co oznacza, że:
- główny element root (korzeń) w dokumencie morze być tylko jeden, w przypadku powyższego kodu tym korzeniem jest znacznik movies;
- korzeń morze mieć dowolną liczbę gałęzi, a gałęzie z kolei mogą również zawierać kolejne gałęzie. W przypadku powyższego kodu gałęzie to wszystkie znaczniki movie, które w tym przypadku nie zawierają ani treści ani podgałęzi więc zamknięte są znacznikiem />;
Warto też wiedzieć, że każda gałąź czy korzeń ma swoją nazwę oraz atrybuty. Nazwą korzenia dokumentu z powyższego kodu jest movies, korzeń ten nie ma atrybutów, natomiast atrybuty posiadają gałęzie o nazwie movie, nazwy atrybutów tychże gałęzi to:
- title - zawiera tytuł filmu;
- year - zawiera rok filmu
Można by rozszerzyć powyższy dokument np do takiej postaci:
W tym przypadku film "Red Dragon" ma gałąź actors (aktorzy) a ta zawiera kolejne gałęzie przechowujące informacje o aktorach i ich rolach.
Przykładowa implementacja odczytu, edycji i zapisu danych XML
Zróbmy sobie mały projekcik bazy danych filmów. Ograniczę się tutaj do minimalnej liczby elementów ponieważ chodzi mi jedynie o pokazanie jak w Qt można tworzyć, wczytywać i zapisywać dane XML. W tym celu konieczne będzie wykorzystanie następujących klas dostępnych w Qt:
- QDomDocument - tworzy obiekt dokumentu XML;
- QDomElement - element drzewa dokumentu;
- QDomNode - węzeł drzewa dokumentu;
- QDomNodeList - lista węzłów drzewa dokumentu
Klasa, która będzie zajmowała się obsługą bazy danych nazwana została przeze mnie MovieDatabase, a jej deklaracja w pliku moviesdatabase.h wygląda następująco:
W pliku moviesdatabase.cpp kod klasy:
I w końcu użycie tejże klasy w funkcji main:
Wynik działania programu po dwukrotnym jego uruchomieniu powinien być następujący:
Database: "database.xml" opened Database document readed correctly Film "Red Dragon" z 2002 roku juz jest w bazie danych Film "Silence of the lambs" z 1991 roku juz jest w bazie danych ======================================================================== Lista filmow w bazie danych ======================================================================== Tytul: "Red Dragon" Rok: 2002 Tytul: "Silence of the lambs" Rok: 1991
Tytuł:
C++ Zbiór zadań z rozwiązaniami
Autor:
Tomasz Jaśniewski
Tytuł:
Mikrokontrolery dla hobbystów. Projekty DIY w języku C i C++
Autor:
Miguel Angel Garcia-Ruiz, Pedro Cesar Santana Mancilla
Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski
Tytuł:
Wprowadzenie do C++
Autor:
Michał Matlak
Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz
Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha
Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams
Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis
Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół
Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz