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)