XML - ćwiczenia 5 - SAX

SAX - Simple API for XML

Oficjalna strona standardu SAX
SAX jest sposobem odczytywania w tworzonych programach danych zapisanych w dokumentach XML.

Podczas odczytywania dokumentu parserem SAX pojawiają się zdarzenia (takie jak "początek elementu", "komentarz", "zawartość tekstowa" itp.). Programista używający parsera SAX podaje kod, który będzie wykonywany, gdy określone zdarzenia będą się pojawiać.

W programowaniu obiektowym własną obsługę zdarzeń można zapisać jako klasę, której metody będą wywoływane w odpowiedzi na poszczególne zdarzenia. Oprócz obsługi typowych zdarzeń w podobny sposób można zdefiniować obsługę błędów.

W Javie parserowi (obiekt klasy implementującej XMLReader) należy przekazać obiekt klasy implementującej ContentHandler. Obiekt ten powinien mieć zaimplementowane metody:

void startDocument()
void endDocument()
void startElement(String namespaceURI, String localName, String qName, Attributes atts)
void endElement(String namespaceURI, String localName, String qName)
void ignorableWhitespace(char[] ch, int start, int length)
void processingInstruction(String target, String data)
void skippedEntity(String name)

void startPrefixMapping(String prefix, String uri)
void endPrefixMapping(String prefix)
void setDocumentLocator(Locator locator)

Cechy i właściwości

SAX2 określa ogólny sposób konfigurowania parserów. Cecha lub właściwość jest określona przez napis - identyfikator.
Cecha ma wartość Tak/Nie (włączona/wyłączona), ustawia się ja metodą
void setFeature(String name, boolean value)
Wartością właściwości może być dowolny obiekt (często są to też napisy - identyfikatory).
void setProperty(String name, Object value)

JAXP - Java API for XML processing

Dokumentacja JAXP
Specyfikacja określa jak w Javie powinny wyglądać narzędzia do przetwarzania XML, między innymi parsery. Określone są interfejsy klas a także cechy i właściwości, które powinien obsługiwać parser.

Implementacje SAX

Java:
Dokumentacja API
Xerces
Dokumentacja API Xerces

Przykład

Poniższy program wypisuje na wyjście zawartość tekstową dokumentu.
SimpleSAX.java

Zadania

  1. Zmodyfikuj program przykładowy tak, aby wypisywał sformatowany dokument (np. elementy z kolejnego poziomu zagnieżdżenia dwa znaki głębiej itp.).