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