Учебники

Java StAX Parser — Обзор

StAX — это API на основе Java для анализа XML-документа аналогично SAX-анализатору. Но есть два основных различия между двумя API —

  • StAX — это API-интерфейс PULL, а SAX — это API-интерфейс PUSH. Это означает, что в случае синтаксического анализатора StAX клиентское приложение должно запрашивать синтаксический анализатор StAX для получения информации из XML всякий раз, когда это необходимо. Но в случае парсера SAX клиентское приложение должно получать информацию, когда парсер SAX уведомляет клиентское приложение о том, что информация доступна.

  • StAX API может читать и писать документы XML. Используя SAX API, XML-файл можно только читать.

StAX — это API-интерфейс PULL, а SAX — это API-интерфейс PUSH. Это означает, что в случае синтаксического анализатора StAX клиентское приложение должно запрашивать синтаксический анализатор StAX для получения информации из XML всякий раз, когда это необходимо. Но в случае парсера SAX клиентское приложение должно получать информацию, когда парсер SAX уведомляет клиентское приложение о том, что информация доступна.

StAX API может читать и писать документы XML. Используя SAX API, XML-файл можно только читать.

Настройка среды

Чтобы использовать анализатор StAX, у вас должен быть stax.jar в пути к классу вашего приложения.

Ниже приведены функции API StAX —

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

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

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

  • Прикладная программа предоставляет «читатель» события, который действует как итератор и выполняет итерацию по событию, чтобы получить необходимую информацию. Другой доступный читатель — это «курсор», который действует как указатель на узлы XML.

  • Когда события идентифицированы, элементы XML могут быть извлечены из объекта события и могут быть обработаны в дальнейшем.

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

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

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

Прикладная программа предоставляет «читатель» события, который действует как итератор и выполняет итерацию по событию, чтобы получить необходимую информацию. Другой доступный читатель — это «курсор», который действует как указатель на узлы XML.

Когда события идентифицированы, элементы XML могут быть извлечены из объекта события и могут быть обработаны в дальнейшем.

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

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

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

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

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

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

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

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

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

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

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

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

Недостатки SAX

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

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

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

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

Класс XMLEventReader

Этот класс предоставляет итератор событий, который можно использовать для итерации по событиям, возникающим при анализе XML-документа.

  • StartElement asStartElement () — Используется для получения значения и атрибутов элемента.

  • EndElement asEndElement () — Вызывается в конце элемента.

  • Символы asCharacters () — могут использоваться для получения таких символов, как CDATA, пробелы и т. Д.

StartElement asStartElement () — Используется для получения значения и атрибутов элемента.

EndElement asEndElement () — Вызывается в конце элемента.

Символы asCharacters () — могут использоваться для получения таких символов, как CDATA, пробелы и т. Д.

Класс XMLEventWriter

Этот интерфейс определяет методы для создания события.

  • add (Событие события) — Добавить событие, содержащее элементы в XML.

add (Событие события) — Добавить событие, содержащее элементы в XML.

Класс XMLStreamReader

Этот класс предоставляет итератор событий, который можно использовать для итерации по событиям, возникающим при анализе XML-документа.

  • int next () — Используется для получения следующего события.

  • boolean hasNext () — Используется для проверки, существуют ли другие события или нет.

  • String getText () — используется для получения текста элемента.

  • String getLocalName () — используется для получения имени элемента.

int next () — Используется для получения следующего события.

boolean hasNext () — Используется для проверки, существуют ли другие события или нет.

String getText () — используется для получения текста элемента.

String getLocalName () — используется для получения имени элемента.

Класс XMLStreamWriter

Этот интерфейс определяет методы для создания события.

writeStartElement (String localName) — добавляет начальный элемент с заданным именем.

writeEndElement (String localName) — добавляет конечный элемент с указанным именем.

writeAttribute (String localName, String value)записывает атрибуты в элемент.