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) — записывает атрибуты в элемент.