Programowanie w językach wysokiego poziomu
Transkrypt
Programowanie w językach wysokiego poziomu
PARSOWANIE DOKUMENTÓW XML Programowanie w językach wysokiego poziomu czwartek, 28 października 2010 PARSOWANIE • Analiza składniowa (parsowanie, ang. parsing) – w informatyce i lingwistyce proces analizy tekstu, w celu ustalenia jego struktury gramatycznej i zgodności z gramatyką języka. • Parser (inaczej analizator składniowy) w informatyce program dokonujący analizy danych wejściowych w celu określenia ich gramatycznej struktury w związku z formalną gramatyką. • Dwie najważniejsze metody parsowania to: DOM i SAX czwartek, 28 października 2010 DOM Document Object Model • DOM - obiektowy model dokumentu. • Parser DOM dokonuje przekształcenia dokumentu XML do postaci drzewa DOM. • Dostęp do poszczególnych elementów dokumentu XML obywa się poprzez przechodzenie pomiędzy węzłami drzewa i odczyt ich wartości. czwartek, 28 października 2010 SAX Simple API for XML • SAX API to interfejs programistyczny wykorzystujący model zdarzeniowy do przetwarzania parserów dokumentów XML • Parser SAX przetwarza dokument XML i dla każdego elementu tego dokumentu wywołuje odpowiednią funkcję • Programista musi przygotować i dostarczyć do parsera odpowiednie funkcje: • startDocument() i endDocument() • startElement() i endElement() • characters() czwartek, 28 października 2010 SAX W LIBXML2 Aby wykorzystywać parser libxml2 w wersji SAX należy utworzyć klasę zawierającą: • statyczne pole składowe typu xmlSAXHandler, • utworzyć następujące funkcje statyczne: • • void startElementSAXFunc (void * user_data, const xmlChar * name, const xmlChar ** atts); • void endElementSAXFunc (void * user_data, const xmlChar * name); • void charactersSAXFunc (void * user_data, const xmlChar * ch, int len); przypisać te funkcje do odpowiednich pól składowych pola statycznego typu xmlSAXHandler • startElement • stopElement • characters Wywołać funkcję: int xmlSAXUserParseFile (xmlSAXHandlerPtr sax, void * user_data, const char * filename); Jako pierwszy parametr funkcji przekazać pole statyczne utworzonej klasy, jako drugi wskaźnik do zmiennej dowolnego typu (np. wskaźnik do Node*), jako trzeci nazwę pliku z dokumentem XML. czwartek, 28 października 2010 PRZEKSZTAŁCENIA TYPÓW • konwersja xmlChar* do string std::string str((char*)ch, len); • konwersja void * do stringa *((string*)user_data) czwartek, 28 października 2010 DOŁĄCZENIE BIBLIOTEKI LIBXML2 DO DEV-CPP Ze strony http://xmlsoft.org/sources/win32/ pobrać pliki • iconv-1.9.2.win32.zip • libxml2-2.7.7.win32.zip • zlib-1.2.5.win32.zip Do katalogu DevCPP (domyślnie C:\Dev-Cpp) należy wgrać pliki z katalogów archiwów w odpowiednie katalogi: bin, include, lib. Po utworzeniu projektu dla należy: • wybrać z menu Projekt / Opcje projektu (Alt+P). • Na zakładce parametry trzeba dodać biblioteki (przez dodaj plik): • iconv_a.lib, • libxml2.lib, • zdll.lib, • libxml2_a.lib. czwartek, 28 października 2010