Интерфейс 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 | Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
ATTRIBUTE |
Указывает, что событие является атрибутом |
static final int |
CDATA |
Указывает, что событие является секцией CDATA |
static final int |
CHARACTERS |
Указывает, что событие содержит символьные данные |
static final int |
COMMENT |
Указывает, что событие является комментарием |
static final int |
DTD |
Указывает, что событие является DTD |
static final int |
END_DOCUMENT |
Указывает, что событие является концом документа |
static final int |
END_ELEMENT |
Указывает, что событие является конечным элементом |
static final int |
ENTITY_DECLARATION |
Указывает на объявление сущности |
static final int |
ENTITY_REFERENCE |
Указывает, что событие является ссылкой на сущность |
static final int |
NAMESPACE |
Указывает, что событие является объявлением пространства имен |
static final int |
NOTATION_DECLARATION |
Указывает на нотацию |
static final int |
PROCESSING_INSTRUCTION |
Указывает, что событие является инструкцией обработки |
static final int |
SPACE |
Символьные данные являются пробельными символами (см. [XML], 2.10 «Обработка пробельных символов»). |
static final int |
START_DOCUMENT |
Указывает, что событие является началом документа |
static final int |
START_ELEMENT |
Указывает, что событие является начальным элементом |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Освобождает все ресурсы, связанные с этим средством чтения. |
int |
getAttributeCount() |
Возвращает количество атрибутов этого события START_ELEMENT. Этот метод допустим только для события START_ELEMENT или ATTRIBUTE. |
String |
getAttributeLocalName |
Возвращает локальное имя атрибута с указанным индексом |
QName |
getAttributeName |
Возвращает qname атрибута с указанным индексом |
String |
getAttributeNamespace |
Возвращает пространство имен атрибута с указанным индексом |
String |
getAttributePrefix |
Возвращает префикс атрибута с указанным индексом |
String |
getAttributeType |
Возвращает тип XML атрибута с указанным индексом |
String |
getAttributeValue |
Возвращает значение атрибута с указанным индексом |
String |
getAttributeValue |
Возвращает нормализованное значение атрибута с указанными пространством имен и локальным именем. Если 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() |
Возвращает объявление автономности из объявления 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() |
Проверяет, задано ли в документе объявление автономности |
Подробное описание методов
getProperty
Object getProperty(String name) throws IllegalArgumentException
- Параметры:
-
name— имя свойства; не может быть null - Возвращает:
- значение свойства
- Вызывает исключение:
-
IllegalArgumentException— если name равно 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, если он не связан ни с каким URI
- Вызывает исключение:
-
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.