StAX
Потоковый API для XML ( StAX ) — это интерфейс прикладного программирования ( API ) для чтения и записи XML- документов, созданный сообществом языков программирования Java .
Традиционно API XML:
- На основе DOM — весь документ считывается в память в виде древовидной структуры для произвольного доступа вызывающего приложения.
- на основе событий — приложение регистрируется для получения событий, когда объекты встречаются в исходном документе.
Оба имеют преимущества: DOM , например, допускает произвольный доступ к документу, а алгоритм, управляемый событиями, такой как SAX , требует небольшого объема памяти и обычно работает намного быстрее.
Эти две метафоры доступа можно рассматривать как полярные противоположности. API на основе дерева обеспечивает неограниченный произвольный доступ и манипуляции, тогда как API на основе событий представляет собой «однократный» проход через исходный документ.
StAX был разработан как медиана между этими двумя противоположностями. В метафоре StAX программная точка входа — это курсор, который представляет точку внутри документа. Приложение перемещает курсор вперед — «подтягивая» информацию из парсера так, как ему нужно. Это отличается от API, основанного на событиях, такого как SAX, который «пересылает» данные в приложение, требуя от приложения поддерживать состояние между событиями по мере необходимости, чтобы отслеживать местоположение в документе.
Происхождение
[ редактировать ]StAX уходит корнями в ряд несовместимых API-интерфейсов извлечения для XML, в первую очередь XMLPULL , авторы которого (Стефан Хаустайн и Александр Сломински) сотрудничали, среди прочего, с BEA Systems , Oracle , Sun и Джеймсом Кларком .
Примеры
[ редактировать ]Из спецификации JSR-173 • Final, V1.0 (используется при добросовестном использовании).
Цитировать:
- Следующий Java API показывает основные методы чтения XML при курсорном подходе.
public interface XMLStreamReader {
public int next() throws XMLStreamException;
public boolean hasNext() throws XMLStreamException;
public String getText();
public String getLocalName();
public String getNamespaceURI();
// ...other methods not shown
}
- На стороне записи API есть методы, которые соответствуют стороне чтения для типов событий «StartElement» и «EndElement».
public interface XMLStreamWriter {
public void writeStartElement(String localName) throws XMLStreamException;
public void writeEndElement() throws XMLStreamException;
public void writeCharacters(String text) throws XMLStreamException;
// ...other methods not shown
}
- 5.3.1 XMLStreamReader
- В этом примере показано, как создать экземпляр фабрики ввода, создать средство чтения и перебирать элементы XML-документа.
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(...);
while (xmlStreamReader.hasNext()) {
xmlStreamReader.next();
}
См. также
[ редактировать ]Конкурирующие и дополняющие друг друга способы обработки XML в Java (порядок зависит от начальной даты внедрения):
- Объектная модель документа (DOM) — первая стандартизированная, независимая от языка/платформы древовидная модель обработки XML; альтернативные модели дерева Java включают JDOM , Dom4j и XOM.
- Simple API for XML (SAX) , стандартный API XML push.
- Java XML Binding API (JAXB) работает поверх другого анализатора (обычно потокового анализатора), привязывает содержащиеся данные к/из объектов Java.
- Потоковая передача XML
- API XQuery для Java
Внешние ссылки
[ редактировать ]- Введение в StAX XML.com, Гарольд, Эллиотт Расти
- Java Streaming API для XML (Stax) — Учебное пособие
- Шаблоны XMLPull Статья Александра Сломинского о шаблонах проектирования XML Pull (и StAX).
- StAX Parser — API курсоров и итераторов Статья HowToDoInJava об API курсоров и итераторов.