StAX — это API на основе JAVA для анализа XML-документа аналогично SAX-анализатору. Но есть два основных различия между двумя API —
-
StAX — это PULL API, тогда как SAX — это PUSH API. Это означает, что в случае синтаксического анализатора StAX клиентское приложение должно запрашивать синтаксический анализатор StAX для получения информации из XML всякий раз, когда это необходимо, но в случае синтаксического анализатора SAX клиентское приложение должно получать информацию, когда синтаксический анализатор SAX уведомляет клиентское приложение о том, что информация доступен.
-
StAX API может читать и писать документы XML. Используя SAX API, xml можно только читать.
StAX — это PULL API, тогда как SAX — это PUSH API. Это означает, что в случае синтаксического анализатора StAX клиентское приложение должно запрашивать синтаксический анализатор StAX для получения информации из XML всякий раз, когда это необходимо, но в случае синтаксического анализатора SAX клиентское приложение должно получать информацию, когда синтаксический анализатор SAX уведомляет клиентское приложение о том, что информация доступен.
StAX API может читать и писать документы XML. Используя SAX API, xml можно только читать.
Ниже приведены функции 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) — записывает атрибут в элемент.