Java SAX Parser - Обзор
SAX (Simple API for XML) - это анализатор XML-документов на основе событий. В отличие от парсера DOM, парсер SAX не создает дерева синтаксического анализа. SAX - это потоковый интерфейс для XML, что означает, что приложения, использующие SAX, получают уведомления о событиях XML-документа, обрабатывающего элемент и атрибут, за один раз в последовательном порядке, начиная с верхней части документа и заканчивая закрытием ROOT элемент.
Читает XML-документ сверху вниз, распознавая токены, составляющие правильно сформированный XML-документ.
Токены обрабатываются в том же порядке, в котором они указаны в документе.
Сообщает прикладной программе характер токенов, обнаруженных анализатором при их возникновении.
Прикладная программа предоставляет обработчик «событий», который должен быть зарегистрирован анализатором.
Когда токены идентифицированы, вызываются методы обратного вызова в обработчике с соответствующей информацией.
Когда использовать?
Вы должны использовать парсер SAX, когда -
Вы можете обрабатывать XML-документ линейно сверху вниз.
Документ не глубоко вложен.
Вы обрабатываете очень большой XML-документ, дерево DOM которого потребляет слишком много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.
Решаемая проблема касается только части XML-документа.
Данные доступны, как только их увидит синтаксический анализатор, поэтому SAX хорошо работает для XML-документа, который поступает в потоке.
Недостатки SAX
У нас нет произвольного доступа к 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) - Вызывается в конце элемента.
void characters(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() - Возвращает количество атрибутов.
String getQName(int index)
String getValue(int index)
String getValue(String qname)