Simple API for XML
Simple API for XML (SAX), dosłownie: „proste API dla XML-a” – interfejs programistyczny do sekwencyjnego parsowania dokumentów XML. Jest to jeden z mechanizmów, który pozwala odczytywać dane zapisane w dokumentach XML. SAX jest popularną alternatywą dla DOM.
Przetwarzanie XML-a przez SAX
[edytuj | edytuj kod]Parser, który implementuje SAX, działa jako parser strumieniowy sterowany zdarzeniami. Użytkownik określa szereg metod, które obsługują zdarzenia pojawiające się podczas przetwarzania danych. SAX rozpoznaje m.in. następujące elementy dokumentu XML:
- węzły tekstowe
- elementy
- instrukcje przetwarzania
- komentarze
Zdarzenia wywoływane są podczas napotkania któregokolwiek z powyższych elementów – dwukrotnie, na początku i na końcu. Atrybuty są dostępne jako część danych przekazywanych do procedury obsługi danego zdarzenia.
Przetwarzanie z użyciem SAX jest jednokierunkowe – wcześniej przetworzone dane nie mogą być ponownie odczytane bez ponownego uruchomienia całej procedury.
Przykład
[edytuj | edytuj kod]Dla następującego dokumentu XML:
<?xml version="1.0" encoding="UTF-8"?>
<RootElement param="value">
<FirstElement>
Some Text
</FirstElement>
<SecondElement param2="something">
Pre-Text <Inline>Inlined text</Inline> Post-text.
</SecondElement>
</RootElement>
parser SAX może wygenerować następującą sekwencję zdarzeń, wskazujących na wystąpienie kolejnych elementów dokumentu:
- prolog dokumentu, nazwa xml, z atrybutem version o wartości "1.0" oraz encoding o wartości "UTF-8"
- początek elementu, nazwa RootElement, z atrybutem param o wartości "value"
- początek elementu, nazwa FirstElement
- węzeł tekstowy o treści "Some Text" (uwaga: przetwarzanie węzłów tekstowych, zwłaszcza w odniesieniu do spacji może się nieco różnić)
- koniec elementu, nazwa FirstElement
- początek elementu, nazwa SecondElement, z atrybutem param2 o wartości "something"
- węzeł tekstowy o treści "Pre-Text"
- początek elementu, nazwa Inline
- węzeł tekstowy o treści "Inlined text"
- koniec elementu, nazwa Inline
- węzeł tekstowy o treści "Post-text."
- koniec elementu, nazwa SecondElement
- koniec elementu, nazwa RootElement