Biblioteka RapidXML pozwala na wygodne parsowanie plików XML.
Instalacja
- Przechodzimy na stronę https://sourceforge.net/projects/rapidxml/files/latest/download (zostanie pobrana paczka plików)
- Do głównego folderu projektu kopiujemy pliki: rapidxml.hpp, rapidxml_iterators.hpp, rapidxml_print.hpp, rapidxml_utils.hpp
Przykładowe zastosowanie:
kraje.xml:
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0"?> <CountryStore> <Country short="PL" area="Europa"> <Name>Polska</Name> </Country> <Country short="CN" area="Azja"> <Name>Chiny</Name> </Country> <Country short="NGR" area="Afryka"> <Name>Nigeria</Name> </Country> </CountryStore> |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <string.h> #include <stdio.h> #include <iostream> #include <fstream> #include <vector> #include "rapidxml.hpp" using namespace std; using namespace rapidxml; class Parser { public: void parseXML(); }; void Parser::parseXML() { xml_document < > doc; xml_node < > * root_node; ifstream input("kraje.xml"); vector < char > buffer((istreambuf_iterator < char > (input)), istreambuf_iterator < char > ()); buffer.push_back('\0'); doc.parse < 0 > ( & buffer[0]); // przypisujemy główny węzeł XML'a root_node = doc.first_node("CountryStore"); // Pierwsza pętla po węzłach "Country", w której odczytujemy atrybuty for (xml_node < > * element_node = root_node -> first_node("Country"); element_node; element_node = element_node -> next_sibling()) { cout << "Kontynent: " << element_node -> first_attribute("area") -> value() << endl; cout << "Skrot: " << element_node -> first_attribute("short") -> value() << endl; // Druga pętla odczytująca wartości węzła "Name" for (xml_node < > * subElement_node = element_node -> first_node("Name"); subElement_node; subElement_node = subElement_node -> next_sibling()) { cout << "Nazwa: " << subElement_node -> value() << endl; } cout << endl; } input.close(); } int main(int argc, char ** argv) { Parser p; p.parseXML(); return 0; } |