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)