Интерфейс XMLStreamReader
- Все суперинтерфейсы:
XMLStreamConstants
- Все известные реализующие классы:
StreamReaderDelegate
public interface XMLStreamReader extends XMLStreamConstants
XMLStreamReader предназначен для последовательного перебора XML с помощью next() и hasNext(). Доступ к данным можно получить с помощью таких методов, как getEventType(), getNamespaceURI(), getLocalName() и getText();
Экземпляр XMLStreamReader создается с начальным типом события START_DOCUMENT. В каждый момент времени он имеет текущее событие, к которому обращаются методы интерфейса; следующее событие может быть загружено с помощью метода next(). Текущий тип события можно определить с помощью getEventType(), а следующее событие возвращается методом next().
События разбора определяются как объявление XML, DTD, начальный тег, символьные данные, пробельные символы, конечный тег, комментарий или инструкция обработки. Событие атрибута или пространства имен может встретиться на корневом уровне документа в результате операции запроса.
Для соответствия XML 1.0 XML-процессор должен передавать приложению идентификаторы объявленных неразбираемых сущностей, объявления нотаций и связанные с ними идентификаторы. Эта информация предоставляется через API свойств этого интерфейса. Доступ к этой информации обеспечивают следующие два свойства: javax.xml.stream.notations и javax.xml.stream.entities. Если текущее событие — DTD, следующий вызов вернет список нотаций List l = (List) getProperty("javax.xml.stream.notations"); Следующий вызов вернет список объявлений сущностей: List l = (List) getProperty("javax.xml.stream.entities"); Доступ к этим свойствам возможен только во время события DTD; если информация недоступна, они возвращают null.
В следующей таблице указано, какие методы допустимы в каждом состоянии. Если метод вызывается в недопустимом состоянии, он выбрасывает java.lang.IllegalStateException.
| Тип события | Допустимые методы |
|---|---|
| Все состояния | getProperty(), hasNext(), require(), close(), getNamespaceURI(), isStartElement(), isEndElement(), isCharacters(), isWhiteSpace(), getNamespaceContext(), getEventType(), getLocation(), hasText(), hasName() |
| START_ELEMENT | next(), getName(), getLocalName(), hasName(), getPrefix(), getAttributeXXX(), isAttributeSpecified(), getNamespaceXXX(), getElementText(), nextTag() |
| ATTRIBUTE | next(), nextTag() getAttributeXXX(), isAttributeSpecified(), |
| NAMESPACE | next(), nextTag() getNamespaceXXX() |
| END_ELEMENT | next(), getName(), getLocalName(), hasName(), getPrefix(), getNamespaceXXX(), nextTag() |
| CHARACTERS | next(), getTextXXX(), nextTag() |
| CDATA | next(), getTextXXX(), nextTag() |
| COMMENT | next(), getTextXXX(), nextTag() |
| SPACE | next(), getTextXXX(), nextTag() |
| START_DOCUMENT | next(), getEncoding(), getVersion(), isStandalone(), standaloneSet(), getCharacterEncodingScheme(), nextTag() |
| END_DOCUMENT | close() |
| PROCESSING_INSTRUCTION | next(), getPITarget(), getPIData(), nextTag() |
| ENTITY_REFERENCE | next(), getLocalName(), getText(), nextTag() |
| DTD | next(), getText(), nextTag() |
- Начиная с:
- 1.6
- См. также:
Краткое описание полей
Поля, объявленные в интерфейсе XMLStreamConstants
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Освобождает все ресурсы, связанные с этим Reader. |
int |
getAttributeCount() |
Возвращает количество атрибутов этого START_ELEMENT; этот метод допустим только для START_ELEMENT или ATTRIBUTE. |
String |
getAttributeLocalName |
Возвращает localName атрибута с указанным индексом |
QName |
getAttributeName |
Возвращает qname атрибута с указанным индексом |
String |
getAttributeNamespace |
Возвращает пространство имен атрибута с указанным индексом |
String |
getAttributePrefix |
Возвращает префикс этого атрибута с указанным индексом |
String |
getAttributeType |
Возвращает тип XML атрибута с указанным индексом |
String |
getAttributeValue |
Возвращает значение атрибута с указанным индексом |
String |
getAttributeValue |
Возвращает нормализованное значение атрибута, заданного пространством имен и localName. Если namespaceURI равен null, равенство пространств имен не проверяется. |
String |
getCharacterEncodingScheme() |
Возвращает кодировку символов, объявленную в объявлении XML. Возвращает null, если она не объявлена. |
String |
getElementText() |
Считывает содержимое элемента, содержащего только текст; если элемент содержит не только текст, выбрасывается исключение. |
String |
getEncoding() |
Возвращает кодировку входных данных, если она известна, или null, если неизвестна. |
int |
getEventType() |
Возвращает целочисленный код, указывающий тип события, на которое указывает курсор. |
String |
getLocalName() |
Возвращает (локальное) имя текущего события. |
Location |
getLocation() |
Возвращает текущее местоположение процессора. |
QName |
getName() |
Возвращает QName для текущего события START_ELEMENT или END_ELEMENT. |
NamespaceContext |
getNamespaceContext() |
Возвращает контекст пространств имен только для чтения для текущей позиции. |
int |
getNamespaceCount() |
Возвращает количество пространств имен, объявленных в этом START_ELEMENT или END_ELEMENT; этот метод допустим только для START_ELEMENT, END_ELEMENT или NAMESPACE. |
String |
getNamespacePrefix |
Возвращает префикс пространства имен, объявленного с указанным индексом. |
String |
getNamespaceURI() |
Если текущее событие — START_ELEMENT или END_ELEMENT, этот метод возвращает URI префикса или пространства имен по умолчанию. |
String |
getNamespaceURI |
Возвращает URI пространства имен, объявленного с указанным индексом. |
String |
getNamespaceURI |
Возвращает URI для указанного префикса. |
String |
getPIData() |
Возвращает раздел данных инструкции обработки. |
String |
getPITarget() |
Возвращает цель инструкции обработки. |
String |
getPrefix() |
Возвращает префикс текущего события или null, если у события нет префикса. |
Object |
getProperty |
Возвращает значение функции или свойства базовой реализации. |
String |
getText() |
Возвращает текущее значение события разбора в виде строки: строковое значение события CHARACTERS, значение COMMENT, замещающее значение ENTITY_REFERENCE, строковое значение раздела CDATA, строковое значение события SPACE или строковое значение внутреннего подмножества DTD. |
char[] |
getTextCharacters() |
Возвращает массив, содержащий символы этого события. |
int |
getTextCharacters |
Возвращает текст, связанный с событием CHARACTERS, SPACE или CDATA. |
int |
getTextLength() |
Возвращает длину последовательности символов этого текстового события в массиве текстовых символов. |
int |
getTextStart() |
Возвращает смещение в массиве текстовых символов, по которому хранится первый символ (этого текстового события). |
String |
getVersion() |
Возвращает версию XML, объявленную в объявлении XML. Возвращает null, если она не объявлена. |
boolean |
hasName() |
Возвращает логическое значение, указывающее, имеет ли текущее событие имя (то есть является ли оно START_ELEMENT или END_ELEMENT). |
boolean |
hasNext() |
Возвращает true, если остались события разбора, и false, если событий больше нет. |
boolean |
hasText() |
Возвращает логическое значение, указывающее, содержит ли текущее событие текст. |
boolean |
isAttributeSpecified |
Возвращает логическое значение, указывающее, был ли этот атрибут создан по умолчанию. |
boolean |
isCharacters() |
Возвращает true, если курсор указывает на событие символьных данных. |
boolean |
isEndElement() |
Возвращает true, если курсор указывает на конечный тег (иначе — false). |
boolean |
isStandalone() |
Возвращает объявление standalone из объявления XML. |
boolean |
isStartElement() |
Возвращает true, если курсор указывает на начальный тег (иначе — false). |
boolean |
isWhiteSpace() |
Возвращает true, если курсор указывает на событие символьных данных, состоящее только из пробельных символов. |
int |
next() |
Возвращает следующее событие разбора — процессор может вернуть все смежные символьные данные одним фрагментом или разделить их на несколько фрагментов. |
int |
nextTag() |
Пропускает пробельные символы (isWhiteSpace() возвращает true), COMMENT или PROCESSING_INSTRUCTION до достижения START_ELEMENT или END_ELEMENT. |
void |
require |
Проверяет, имеет ли текущее событие указанный тип и совпадают ли пространство имен и имя с пространством имен и именем текущего события. |
boolean |
standaloneSet() |
Проверяет, задано ли в документе значение standalone. |
Подробное описание методов
getProperty
Object getProperty(String name) throws IllegalArgumentException
- Параметры:
-
name— имя свойства, не может быть null - Возвращает:
- значение свойства
- Выбрасывает:
-
IllegalArgumentException— если имя равно null
next
int next() throws XMLStreamException
Пусть задан следующий XML-код:
<foo><!--description-->content text<![CDATA[<greeting>Hello>/greeting>]]>other content>/foo>
При вызове next() на элементе foo поведение будет следующим:
1 — комментарий (COMMENT)
2 — затем секция символьных данных (CHARACTERS)
3 — затем секция CDATA (еще одно CHARACTERS)
4 — затем следующая секция символьных данных (еще одно CHARACTERS)
5 — затем END_ELEMENT
ПРИМЕЧАНИЕ: пустой элемент (например, <tag/>) будет передан в виде двух отдельных событий: START_ELEMENT, END_ELEMENT. Это сохраняет эквивалентность разбора пустого элемента и <tag></tag>.
- Возвращает:
- целочисленный код, соответствующий текущему событию разбора
- Выбрасывает:
-
NoSuchElementException— если этот метод вызван, когда hasNext() возвращает false -
XMLStreamException— если при обработке базового источника XML произошла ошибка - См. также:
require
void require(int type, String namespaceURI, String localName) throws XMLStreamException
- Параметры:
-
type— тип события -
namespaceURI— URI события, может быть null -
localName— локальное имя события, может быть null - Выбрасывает:
-
XMLStreamException— если требуемые значения не совпадают.
getElementText
String getElementText() throws XMLStreamException
Предварительное условие: текущее событие — START_ELEMENT.
Постусловие: текущее событие — соответствующий END_ELEMENT.
Метод выполняет следующие действия (реализации могут оптимизировать обработку, но должны выполнять эквивалентные действия):
if(getEventType() != XMLStreamConstants.START_ELEMENT) {
throw new XMLStreamException(
"parser must be on START_ELEMENT to read next text", getLocation());
}
int eventType = next();
StringBuffer content = new StringBuffer();
while(eventType != XMLStreamConstants.END_ELEMENT) {
if(eventType == XMLStreamConstants.CHARACTERS
|| eventType == XMLStreamConstants.CDATA
|| eventType == XMLStreamConstants.SPACE
|| eventType == XMLStreamConstants.ENTITY_REFERENCE) {
buf.append(getText());
} else if(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION
|| eventType == XMLStreamConstants.COMMENT) {
// skipping
} else if(eventType == XMLStreamConstants.END_DOCUMENT) {
throw new XMLStreamException(
"unexpected end of document when reading element text content", this);
} else if(eventType == XMLStreamConstants.START_ELEMENT) {
throw new XMLStreamException(
"element text content may not contain START_ELEMENT", getLocation());
} else {
throw new XMLStreamException(
"Unexpected event type "+eventType, getLocation());
}
eventType = next();
}
return buf.toString();
- Возвращает:
- содержимое элемента, состоящего только из текста
- Выбрасывает:
-
XMLStreamException— если текущее событие не является START_ELEMENT или обнаружен элемент, не являющийся текстовым
nextTag
int nextTag() throws XMLStreamException
Предварительное условие: отсутствует
Постусловие: текущее событие — START_ELEMENT или END_ELEMENT; курсор мог переместиться через любое событие с пробельными символами.
По сути, метод выполняет следующие действия (реализации могут оптимизировать обработку, но должны выполнять эквивалентные действия):
int eventType = next();
while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // skip whitespace
|| (eventType == XMLStreamConstants.CDATA && isWhiteSpace())
// skip whitespace
|| eventType == XMLStreamConstants.SPACE
|| eventType == XMLStreamConstants.PROCESSING_INSTRUCTION
|| eventType == XMLStreamConstants.COMMENT
) {
eventType = next();
}
if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) {
throw new String XMLStreamException("expected start or end tag", getLocation());
}
return eventType;
- Возвращает:
- тип события прочитанного элемента (START_ELEMENT или END_ELEMENT)
- Выбрасывает:
-
XMLStreamException— если текущее событие не является пробельными символами, PROCESSING_INSTRUCTION, START_ELEMENT или END_ELEMENT -
NoSuchElementException— если этот метод вызван, когда hasNext() возвращает false
hasNext
boolean hasNext() throws XMLStreamException
- Возвращает:
- true, если имеются следующие события, иначе false
- Выбрасывает:
-
XMLStreamException— если при определении следующего состояния произошла фатальная ошибка
close
void close() throws XMLStreamException
- Выбрасывает:
-
XMLStreamException— если при освобождении связанных ресурсов возникли ошибки
getNamespaceURI
String getNamespaceURI(String prefix)
ПРИМЕЧАНИЕ:Привязка префикса 'xml' определяется спецификацией Пространства имен в XML как "http://www.w3.org/XML/1998/namespace".
ПРИМЕЧАНИЕ: Префикс 'xmlns' должен разрешаться в следующее пространство имен: http://www.w3.org/2000/xmlns/
- Параметры:
-
prefix— префикс для поиска, не может быть null - Возвращает:
- URI, связанный с указанным префиксом, или null, если он не связан ни с чем
- Выбрасывает:
-
IllegalArgumentException— если префикс равен null
isStartElement
boolean isStartElement()
- Возвращает:
- true, если курсор указывает на начальный тег, иначе false
isEndElement
boolean isEndElement()
- Возвращает:
- true, если курсор указывает на конечный тег, иначе false
isCharacters
boolean isCharacters()
- Возвращает:
- true, если курсор указывает на символьные данные, иначе false
isWhiteSpace
boolean isWhiteSpace()
- Возвращает:
- true, если курсор указывает только на пробельные символы, иначе false
getAttributeValue
String getAttributeValue(String namespaceURI, String localName)
- Параметры:
-
namespaceURI— пространство имен атрибута -
localName— локальное имя атрибута, не может быть null - Возвращает:
- значение атрибута или null, если атрибут не найден
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeCount
int getAttributeCount()
- Возвращает:
- количество атрибутов
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeName
QName getAttributeName(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- QName атрибута
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeNamespace
String getAttributeNamespace(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- URI пространства имен (может быть null)
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeLocalName
String getAttributeLocalName(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- localName атрибута
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributePrefix
String getAttributePrefix(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- префикс атрибута
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeType
String getAttributeType(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- тип XML атрибута
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getAttributeValue
String getAttributeValue(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- значение атрибута
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
isAttributeSpecified
boolean isAttributeSpecified(int index)
- Параметры:
-
index— позиция атрибута - Возвращает:
- true, если это атрибут со значением по умолчанию
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или ATTRIBUTE
getNamespaceCount
int getNamespaceCount()
- Возвращает:
- количество объявлений пространств имен для данного элемента
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT, END_ELEMENT или NAMESPACE
getNamespacePrefix
String getNamespacePrefix(int index)
- Параметры:
-
index— позиция объявления пространства имен - Возвращает:
- префикс пространства имен
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT, END_ELEMENT или NAMESPACE
getNamespaceURI
String getNamespaceURI(int index)
- Параметры:
-
index— позиция объявления пространства имен - Возвращает:
- URI пространства имен
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT, END_ELEMENT или NAMESPACE
getNamespaceContext
NamespaceContext getNamespaceContext()
- Возвращает:
- контекст пространств имен
getEventType
int getEventType()
XMLStreamConstants.START_DOCUMENT.- Возвращает:
- тип текущего события
getText
String getText()
- Возвращает:
- текущий текст или null
- Выбрасывает:
-
IllegalStateException— если это состояние не является допустимым текстовым состоянием.
getTextCharacters
char[] getTextCharacters()
- Возвращает:
- текущий текст или пустой массив
- Выбрасывает:
-
IllegalStateException— если это состояние не является допустимым текстовым состоянием.
getTextCharacters
int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException
int length = 1024;
char[] myBuffer = new char[ length ];
for ( int sourceStart = 0 ; ; sourceStart += length )
{
int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length );
if (nCopied < length)
break;
}
XMLStreamException может быть выброшено при наличии ошибок XML в базовом источнике. Аргумент "targetStart" должен быть больше или равен 0 и меньше длины "target"; значение Length должно быть больше 0, а "targetStart + length" должно быть меньше или равно длине "target".- Параметры:
-
sourceStart— индекс первого символа в исходном массиве для копирования -
target— целевой массив -
targetStart— начальное смещение в целевом массиве -
length— количество символов для копирования - Возвращает:
- фактическое количество скопированных символов
- Выбрасывает:
-
XMLStreamException— если базовый источник XML имеет неправильный формат -
IndexOutOfBoundsException— если targetStart < 0 или > длины target -
IndexOutOfBoundsException— если length < 0 или targetStart + length > длины target -
UnsupportedOperationException— если этот метод не поддерживается -
NullPointerException— если target равен null
getTextStart
int getTextStart()
- Возвращает:
- начальную позицию текста в массиве символов
- Выбрасывает:
-
IllegalStateException— если это состояние не является допустимым текстовым состоянием.
getTextLength
int getTextLength()
- Возвращает:
- длину текста
- Выбрасывает:
-
IllegalStateException— если это состояние не является допустимым текстовым состоянием.
getEncoding
String getEncoding()
- Возвращает:
- кодировку этого экземпляра или null
hasText
boolean hasText()
- Возвращает:
- true, если событие содержит текст, иначе false
getLocation
Location getLocation()
- Возвращает:
- местоположение курсора
getName
QName getName()
- Возвращает:
- QName для текущего события START_ELEMENT или END_ELEMENT
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT или END_ELEMENT
getLocalName
String getLocalName()
- Возвращает:
- localName
- Выбрасывает:
-
IllegalStateException— если текущим событием не является START_ELEMENT, END_ELEMENT или ENTITY_REFERENCE
hasName
boolean hasName()
- Возвращает:
- true, если событие имеет имя, иначе false
getNamespaceURI
String getNamespaceURI()
- Возвращает:
- URI, связанный с префиксом этого элемента, пространство имен по умолчанию или null
getPrefix
String getPrefix()
- Возвращает:
- префикс или null
getVersion
String getVersion()
- Возвращает:
- версию XML или null
isStandalone
boolean isStandalone()
- Возвращает:
- true, если документ является автономным, иначе false
standaloneSet
boolean standaloneSet()
- Возвращает:
- true, если в документе задано значение standalone, иначе false
getCharacterEncodingScheme
String getCharacterEncodingScheme()
- Возвращает:
- кодировку, объявленную в документе, или null
getPITarget
String getPITarget()
- Возвращает:
- цель или null
getPIData
String getPIData()
- Возвращает:
- данные или null
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.xml/javax/xml/stream/XMLStreamReader.html