Учебники

SAX Parser — Обзор

SAX (простой API для XML) — это анализатор событий на основе событий для документов XML. В отличие от парсера DOM, парсер SAX не создает дерева разбора. SAX — это потоковый интерфейс для XML, что означает, что приложения, использующие SAX, получают уведомления о событиях об обрабатываемом XML-документе — элемент и атрибут, в одно и то же время в последовательном порядке, начиная с верхней части документа и заканчивая закрытием корень элемент.

  • Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

  • Токены обрабатываются в том же порядке, в котором они указаны в документе.

  • Сообщает прикладной программе о характере токенов, с которыми анализатор сталкивался по мере их появления.

  • Прикладная программа предоставляет обработчик «события», который должен быть зарегистрирован парсером.

  • Когда токены идентифицированы, методы обратного вызова в обработчике вызываются с соответствующей информацией.

Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

Токены обрабатываются в том же порядке, в котором они указаны в документе.

Сообщает прикладной программе о характере токенов, с которыми анализатор сталкивался по мере их появления.

Прикладная программа предоставляет обработчик «события», который должен быть зарегистрирован парсером.

Когда токены идентифицированы, методы обратного вызова в обработчике вызываются с соответствующей информацией.

Когда использовать?

Вы должны использовать парсер SAX, когда —

  • Вы можете обрабатывать XML-документ линейно сверху вниз.

  • Документ не является глубоко вложенным.

  • Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

  • Проблема, которая должна быть решена, включает только часть XML-документа.

  • Данные становятся доступными, как только они видятся синтаксическим анализатором, поэтому SAX хорошо работает для XML-документа, который поступает через поток.

Вы можете обрабатывать XML-документ линейно сверху вниз.

Документ не является глубоко вложенным.

Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

Проблема, которая должна быть решена, включает только часть XML-документа.

Данные становятся доступными, как только они видятся синтаксическим анализатором, поэтому SAX хорошо работает для XML-документа, который поступает через поток.

Недостатки SAX

  • У нас нет произвольного доступа к документу XML, поскольку он обрабатывается в прямом направлении.

  • Если вам нужно отслеживать данные, которые анализатор видел, или изменять порядок элементов, вы должны написать код и сохранить данные самостоятельно.

У нас нет произвольного доступа к документу XML, поскольку он обрабатывается в прямом направлении.

Если вам нужно отслеживать данные, которые анализатор видел, или изменять порядок элементов, вы должны написать код и сохранить данные самостоятельно.

Интерфейс ContentHandler

Этот интерфейс указывает методы обратного вызова, которые использует синтаксический анализатор SAX для уведомления прикладной программы о компонентах документа XML, которые он видел.

  • void startDocument ()вызывается в начале документа.

  • void endDocument () — Вызывается в начале документа.

  • void startElement (String uri, String localName, String qName, Attributes atts) — Вызывается в начале элемента.

  • void endElement (String uri, String localName, String qName) — Вызывается в конце элемента.

  • Пустые символы (char [] ch, int start, int length) — Вызывается, когда встречаются символьные данные.

  • void ignorableWhitespace (char [] ch, int start, int length) — Вызывается, когда присутствует DTD и встречаются игнорируемые пробелы.

  • void processingInstruction (String target, String data) — Вызывается при распознавании инструкции обработки.

  • void setDocumentLocator (Locator locator)) — Предоставляет локатор, который можно использовать для определения позиций в документе.

  • void skippedEntity (String name) — Вызывается, когда встречается неразрешенная сущность.

  • void startPrefixMapping (String prefix, String uri) — Вызывается, когда определяется новое сопоставление пространства имен.

  • void endPrefixMapping (String prefix)вызывается, когда определение пространства имен заканчивает свою область.

void startDocument ()вызывается в начале документа.

void endDocument () — Вызывается в начале документа.

void startElement (String uri, String localName, String qName, Attributes atts) — Вызывается в начале элемента.

void endElement (String uri, String localName, String qName) — Вызывается в конце элемента.

Пустые символы (char [] ch, int start, int length) — Вызывается, когда встречаются символьные данные.

void ignorableWhitespace (char [] ch, int start, int length) — Вызывается, когда присутствует DTD и встречаются игнорируемые пробелы.

void processingInstruction (String target, String data) — Вызывается при распознавании инструкции обработки.

void setDocumentLocator (Locator locator)) — Предоставляет локатор, который можно использовать для определения позиций в документе.

void skippedEntity (String name) — Вызывается, когда встречается неразрешенная сущность.

void startPrefixMapping (String prefix, String uri) — Вызывается, когда определяется новое сопоставление пространства имен.

void endPrefixMapping (String prefix)вызывается, когда определение пространства имен заканчивает свою область.

Интерфейс атрибутов

Этот интерфейс определяет методы для обработки атрибутов, связанных с элементом.

int getLength () — Возвращает количество атрибутов.

Строка getQName (int index)

Строка getValue (int index)

Строка getValue (Строка qname)