Потоковый API для XML ( StAX ) — это интерфейс прикладного программирования ( API ) для чтения и записи XML- документов, созданный сообществом разработчиков языка программирования Java .
Традиционно XML API бывают:
Оба варианта имеют свои преимущества: например, DOM обеспечивает произвольный доступ к документу, а алгоритм, управляемый событиями, такой как SAX , потребляет мало памяти и, как правило, работает намного быстрее.
Эти две метафоры доступа можно рассматривать как полярные противоположности. API на основе дерева обеспечивает неограниченный, произвольный доступ и манипуляции, в то время как API на основе событий — это «однократный» проход через исходный документ.
StAX был разработан как медиана между этими двумя противоположностями. В метафоре StAX программная точка входа — это курсор, который представляет точку внутри документа. Приложение перемещает курсор вперед — «вытягивая» информацию из парсера по мере необходимости. Это отличается от API на основе событий — например, SAX — который «проталкивает» данные в приложение — требуя от приложения сохранять состояние между событиями по мере необходимости для отслеживания местоположения внутри документа.
StAX берет свое начало в ряде несовместимых API-интерфейсов pull для XML, наиболее известным из которых является XMLPULL, авторы которого (Стефан Хауштайн и Александр Сломински) сотрудничали, в частности, с BEA Systems , Oracle , Sun и Джеймсом Кларком .
Из спецификации JSR-173 • Final, V1.0 (используется в рамках добросовестного использования).
Цитировать:
public interface XMLStreamReader { public int next () выдает XMLStreamException ; public boolean hasNext () выдает XMLStreamException ; public String getText (); public String getLocalName (); public String getNamespaceURI (); // ...другие методы не показаны }
public interface XMLStreamWriter { public void writeStartElement ( String localName ) выдает исключение XMLStreamException ; public void writeEndElement () выдает исключение XMLStreamException ; public void writeCharacters ( String text ) выдает исключение XMLStreamException ; // ...другие методы не показаны }
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance () ; XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader ( ... ) ; while ( xmlStreamReader.hasNext ( ) ) { xmlStreamReader.next ( ) ; }
Конкурирующие и взаимодополняющие способы обработки XML в Java (порядок приблизительно основан на первоначальной дате внедрения):