Интерфейс 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() |
Освобождает все ресурсы, связанные с этим 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, значение комментария, значение замены для 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() |
Проверяет, было ли установлено значение 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- 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- если текущее событие не является пробелом, инструкцией обработки, 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 - Возвращает:
- 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- позиция атрибута - Возвращает:
- локальное имя атрибута
- Исключения:
-
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». Длина должна быть больше 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, если standalone, или false в противном случае
standaloneSet
boolean standaloneSet()
- Возвращает:
- true, если standalone было установлено в документе, или false в противном случае
getCharacterEncodingScheme
String getCharacterEncodingScheme()
- Возвращает:
- объявленную в документе кодировку или null
getPITarget
String getPITarget()
- Возвращает:
- целевой элемент или null
getPIData
String getPIData()
- Возвращает:
- данные или null
© 1993, 2021, 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/17/docs/api/java.xml/javax/xml/stream/XMLStreamReader.html