Интерфейс 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
- См. также:
Краткое описание полей
Поля, объявленные в интерфейсе javax.xml.stream.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() |
Освобождает все ресурсы, связанные с этим читателем. |
int |
getAttributeCount() |
Возвращает количество атрибутов в этом событии START_ELEMENT. Метод валиден только для START_ELEMENT или ATTRIBUTE. |
String |
getAttributeLocalName |
Возвращает localName атрибута по заданному индексу. |
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, значение комментария, замещающее значение 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 |
Возвращает true, если этот атрибут был создан по умолчанию. |
boolean |
isCharacters() |
Возвращает true, если курсор указывает на событие данных символов. |
boolean |
isEndElement() |
Возвращает true, если курсор указывает на закрывающий тег (в противном случае false). |
boolean |
isStandalone() |
Получает объявленное значение автономности из XML-декларации. |
boolean |
isStartElement() |
Возвращает true, если курсор указывает на открывающий тег (в противном случае false). |
boolean |
isWhiteSpace() |
Возвращает true, если курсор указывает на событие данных символов, состоящее только из пробелов. |
int |
next() |
Получает следующее событие разбора. Процессор может вернуть все смежные данные символов в одном блоке или разделить их на несколько. |
int |
nextTag() |
Пропускает любые пробелы (isWhiteSpace() возвращает true), комментарии или инструкции обработки до тех пор, пока не будет достигнут START_ELEMENT или END_ELEMENT. |
void |
require |
Проверяет, является ли текущее событие заданного типа, и совпадают ли пространство имён и имя с текущим пространством имён и именем текущего события. |
boolean |
standaloneSet() |
Проверяет, была ли установлена автономность в документе. |
Подробное описание методов
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- пространство имён события, может быть 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' связан, как определено в спецификации Namespaces in XML, со значением "http://www.w3.org/XML/1998/namespace".
ПРИМЕЧАНИЕ: Префикс 'xmlns' должен быть разрешён в соответствии со следующим пространством имён http://www.w3.org/2000/xmlns/
- Параметры:
-
prefix- Префикс для поиска, не может быть null - Возвращает:
- пространство имён, связанное с данным префиксом, или 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- позиция атрибута - Возвращает:
- локальное имя атрибута
- Исключение:
-
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()
- Возвращает:
- локальное имя
- Выбрасывает:
-
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://download.java.net/java/early_access/jdk24/docs/api/java.xml/javax/xml/stream/XMLStreamReader.html