XML in programming - Streaming processing of XML documents

References for subjects 4-6

Recommendations:

Import project from XML06.zip to Eclipse.

SAX

Task 1.

Program ...lab06.SAXFormatter (making use of FormattingHandler) prints out a given document (element tags and text nodes only, we do not handle special characters, etc.).

  1. Remove all existing indentations and whitespaces using e.g. String.trim
  2. Add an indentation before each element, proportional to the depth of the element.

Printing also comments is not so obvious in this case. We would have to use LexicalHandler.

Task 2. Sklep

(Przykładowy dokument i tak jest po polsku...)

W pakiecie ...lab06.sklep znajdziecie program ZnajdzMaxCene oraz niedokończoną klasę MaxCenaHandler,

  1. Uzupełnij implementację handlera tak, aby zapamiętywał maksymalną cenę towaru w dokumencie. Można założyć, że dokument wejściowy jest poprawny (walidujemy go względem schemy) i mamy uwzględnić wszystkie wystąpienia elementu cena.

SAX filters

Task 3. Filtrowanie towarów z wybranej kategorii

W pakiecie ...lab06.sklep znajdziecie program Filtruj oraz niedokońcozną klasę FiltrKategorii.

  1. Uruchom program i zauważ, że wypisuje dokument wejściowy bez zmian.
  2. Uzupełnij implementację filtra tak, aby "przepuszczane" były tylko towary należące do wybranej kategorii, np. 'herbata', oraz ich zawartość, a nie przepuszczane inne towary.
  3. Wykorzystaj uzupełniony wcześniej MaxCenaHandler oraz FiltrKategorii do zbudowania programu, który znajduje maksymalną cenę towaru w podanej kategorii. Wystarczy połączyć parser, filtr i handler w jeden łańcuszek i uruchomić parsowanie. W razie wątpliwości zobacz program SaxFiltry w przykładach.

StAX

Streaming API fo XML offers more intuitive control flow than SAX. It also directly supports writing documents – see XMLStreamWriter and XMLEventWriter classes.

Example 1.

Tworzenie Readara i Writera - może się przydać do ostatniego punktu poniższego zadania.

			
XMLInputFactory ifa = XMLInputFactory.newInstance();
XMLEventReader reader = ifa.createXMLEventReader(new FileInputStream(wej));

XMLOutputFactory ofa = XMLOutputFactory.newInstance();
XMLEventWriter writer = ofa.createXMLEventWriter(new FileOutputStream(wyj));

XMLEventFactory ef = XMLEventFactory.newInstance();			
			
			

Task 4. Filtrowanie towarów z wybranej kategorii (StAX)

W pakiecie ...lab06.sklep znajdziecie program SredniaCena_Stax oraz klasę FiltrKategorii_Stax. Uwaga, działają one na wersji dokumentów z przestrzeniami nazw (sklep_ns.xml).

  1. Uruchom program i przeanalizuj jego działanie.
  2. Wykorzystaj istniejący filtr i program, aby zbudować program, który oblicza średnią cenę towarów w wybranej kategorii.
  3. Wykorzystaj filtr, a także klasę XMLEventWriter, aby stworzyć program, który przepisuje plik zostawiając tylko towary z wybranej kategorii. Niewykluczone, że filtr trzeba jeszcze poprawić/uzupełnić

Valid XHTML 1.1Valid CSS