Обычно SAX-парсеры требуют фиксированного количества памяти для своей работы, но не позволяют изменять содержимое документа. Всё, что делает SAX-парсер, это сообщает вызвавшему приложению о встретившихся распознанных элементах XML-разметки или о встретившихся ошибках. Связь парсера с вызывающим приложением, как правило, осуществляется посредством функций обратного вызова.
Реализации SAX-парсеров могут различаться, но в целом они устроены однотипно, примерно так, как показано ниже:
Применяются SAX-парсеры либо для быстрого поиска по XML-документам, либо во время построения DOM, либо для чтения XML-потоков большого объёма (когда построение DOM требует слишком большого объёма памяти).
SAX — событийный парсер XML.
Он содержит очень похожую модель обработки событий на такую же модель в Java. К примеру, в аплете можно зарегистрировать обработчик события на клик мышкой, а в SAX можно зарегистрировать обработчик события на начало и конец тегов элементов, таких как <name>
и </name>
.
В этом документе рассматривается XML парсер производства IBM. Он бесплатен и имеет общедоступные исходные тексты.
Возьмём простой пример XML файла:
Параметр encoding="windows-1251" необходим для работы в кодировке Windows. Осуществим разбор XML-документа с помощью SAX в несколько шагов. Эти шаги выделены в коде примера.
В примере наш класс расширит DefaultHandler. DefaultHandler — это класс-адаптер, который позволит нам обрабатывать только те события SAX-а, которые нам нужны, а не реализовывать все его события.