Интерфейс 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() |
Возвращает длину последовательности символов для этого события Text внутри массива символов текста. |
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() |
Получает объявление 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- 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()
- Возвращает:
- локальное имя
- Исключения:
-
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, 2023, 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/21/docs/api/java.xml/javax/xml/stream/XMLStreamReader.html