Интерфейс XMLReader
- Все известные подинтерфейсы:
XMLFilter
- Все известные реализующие классы:
-
ParserAdapter,XMLFilterImpl
public interface XMLReader
XMLReader — это интерфейс, который должен реализовать драйвер SAX2-парсера XML. Этот интерфейс позволяет приложению устанавливать и запрашивать функции и свойства в парсере, регистрировать обработчики событий для обработки документа и запускать парсинг документа.
Предполагается, что все интерфейсы SAX являются синхронными: методы parse должны не возвращаться, пока парсинг не будет завершен, и читатели должны дождаться возврата обработчика события, прежде чем сообщать о следующем событии.
Этот интерфейс заменяет устаревший интерфейс SAX 1.0 Parser. Интерфейс XMLReader содержит два важных улучшения по сравнению со старым интерфейсом Parser (а также некоторые незначительные):
- он добавляет стандартный способ запроса и установки функций и свойств; и
- он добавляет поддержку пространств имён, что необходимо для многих более высоких стандартов XML.
Доступны адаптеры для преобразования SAX1 Parser в SAX2 XMLReader и наоборот.
- Примечание API:
- Несмотря на своё название, этот интерфейс не расширяет стандартный Java-интерфейс
Reader, потому что чтение XML — это принципиально иная задача, чем чтение символьных данных. - С:
- 1.4, SAX 2.0
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ContentHandler |
getContentHandler() |
Возвращает текущий обработчик содержимого. |
DTDHandler |
getDTDHandler() |
Возвращает текущий обработчик DTD. |
EntityResolver |
getEntityResolver() |
Возвращает текущий разрешитель сущностей. |
ErrorHandler |
getErrorHandler() |
Возвращает текущий обработчик ошибок. |
boolean |
getFeature |
Ищет значение флага функции. |
Object |
getProperty |
Ищет значение свойства. |
void |
parse |
Парсит XML-документ из идентификатора системы (URI). |
void |
parse |
Парсит XML-документ. |
void |
setContentHandler |
Разрешает приложению зарегистрировать обработчик событий содержимого. |
void |
setDTDHandler |
Разрешает приложению зарегистрировать обработчик событий DTD. |
void |
setEntityResolver |
Разрешает приложению зарегистрировать разрешитель сущностей. |
void |
setErrorHandler |
Разрешает приложению зарегистрировать обработчик событий об ошибках. |
void |
setFeature |
Устанавливает значение флага функции. |
void |
setProperty |
Устанавливает значение свойства. |
Подробное описание методов
getFeature
boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя функции — любой полностью квалифицированный URI. Возможно, что XMLReader распознаёт имя функции, но временно не может вернуть его значение. Некоторые значения функций могут быть доступны только в определённых контекстах, например, до, во время или после разбора. Также некоторые значения функций могут быть недоступны программно. (В случае адаптера для SAX1 Parser, нет независимого от реализации способа отобразить, выполняет ли базовый анализатор валидацию, расширяет ли внешние сущности и т.д.)
Все XMLReaders обязаны распознавать имена функций http://xml.org/sax/features/namespaces и http://xml.org/sax/features/namespace-prefixes.
Типичное использование выглядит так:
XMLReader r = new MySAXDriver();
// try to activate validation
try {
r.setFeature("http://xml.org/sax/features/validation", true);
} catch (SAXException e) {
System.err.println("Cannot activate validation.");
}
// register event handlers
r.setContentHandler(new MyContentHandler());
r.setErrorHandler(new MyErrorHandler());
// parse the first document
try {
r.parse("http://www.foo.com/mydoc.xml");
} catch (IOException e) {
System.err.println("I/O exception reading XML document");
} catch (SAXException e) {
System.err.println("XML exception reading document.");
}
Реализаторы свободны (и им рекомендуется) придумывать свои собственные функции, используя имена, построенные на своих собственных URI.
- Параметры:
-
name- Имя функции, которое является полностью квалифицированным URI. - Возвращает:
- Текущее значение функции (true или false).
- Исключение:
-
SAXNotRecognizedException- Если значение функции не может быть назначено или извлечено. -
SAXNotSupportedException- Когда XMLReader распознаёт имя функции, но не может определить его значение в данный момент. - См. также:
setFeature
void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
Имя функции — любой полностью квалифицированный URI. Возможно, что XMLReader может отобразить значение функции, но не может изменить текущее значение. Некоторые значения функций могут быть неизменяемыми или изменяемыми только в определённых контекстах, например, до, во время или после разбора.
Все XMLReaders обязаны поддерживать установку http://xml.org/sax/features/namespaces в true и http://xml.org/sax/features/namespace-prefixes в false.
- Параметры:
-
name- Имя функции, которое является полностью квалифицированным URI. -
value- Требуемое значение функции (true или false). - Исключение:
-
SAXNotRecognizedException- Если значение функции не может быть назначено или извлечено. -
SAXNotSupportedException- Когда XMLReader распознаёт имя функции, но не может установить запрошенное значение. - См. также:
getProperty
Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — любой полностью квалифицированный URI. Возможно, что XMLReader распознаёт имя свойства, но временно не может вернуть его значение. Некоторые значения свойств могут быть доступны только в определённых контекстах, например, до, во время или после разбора.
XMLReaders не обязаны распознавать какие-либо конкретные имена свойств, хотя начальный набор основных свойств документирован для SAX2.
Реализаторы свободны (и им рекомендуется) придумывать свои собственные свойства, используя имена, построенные на своих собственных URI.
- Параметры:
-
name- Имя свойства, которое является полностью квалифицированным URI. - Возвращает:
- Текущее значение свойства.
- Исключение:
-
SAXNotRecognizedException- Если значение свойства не может быть назначено или извлечено. -
SAXNotSupportedException- Когда XMLReader распознаёт имя свойства, но не может определить его значение в данный момент. - См. также:
setProperty
void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — любой полностью квалифицированный URI. Возможно, что XMLReader распознаёт имя свойства, но не может изменить текущее значение. Некоторые значения свойств могут быть неизменяемыми или изменяемыми только в определённых контекстах, например, до, во время или после разбора.
XMLReaders не обязаны распознавать установку каких-либо конкретных имён свойств, хотя набор основных свойств определён SAX2.
Этот метод также является стандартным механизмом для установки расширенных обработчиков.
- Параметры:
-
name- Имя свойства, которое является полностью квалифицированным URI. -
value- Запрошенное значение свойства. - Исключение:
-
SAXNotRecognizedException- Если значение свойства не может быть назначено или извлечено. -
SAXNotSupportedException- Когда XMLReader распознаёт имя свойства, но не может установить запрошенное значение.
setEntityResolver
void setEntityResolver(EntityResolver resolver)
Если приложение не регистрирует обработчик сущностей, XMLReader выполнит собственное значение по умолчанию.
Приложения могут зарегистрировать новый или другой обработчик посреди разбора, и SAX-анализатор должен немедленно начать использовать новый обработчик.
- Параметры:
-
resolver- Обработчик сущностей. - См. также:
getEntityResolver
EntityResolver getEntityResolver()
- Возвращает:
- Текущий обработчик сущностей или null, если он не был зарегистрирован.
- См. также:
setDTDHandler
void setDTDHandler(DTDHandler handler)
Если приложение не регистрирует обработчик DTD, все события DTD, сообщаемые SAX-анализатором, будут игнорироваться.
Приложения могут зарегистрировать новый или другой обработчик посреди разбора, и SAX-анализатор должен немедленно начать использовать новый обработчик.
- Параметры:
-
handler- Обработчик DTD. - См. также:
getDTDHandler
DTDHandler getDTDHandler()
- Возвращает:
- Текущий обработчик DTD или null, если он не был зарегистрирован.
- См. также:
setContentHandler
void setContentHandler(ContentHandler handler)
Если приложение не регистрирует обработчик содержимого, все события содержимого, сообщаемые SAX-анализатором, будут игнорироваться.
Приложения могут зарегистрировать новый или другой обработчик посреди разбора, и SAX-анализатор должен немедленно начать использовать новый обработчик.
- Параметры:
-
handler- Обработчик содержимого. - См. также:
getContentHandler
ContentHandler getContentHandler()
- Возвращает:
- Текущий обработчик содержимого или null, если он не был зарегистрирован.
- См. также:
setErrorHandler
void setErrorHandler(ErrorHandler handler)
Если приложение не регистрирует обработчик ошибок, все события ошибок, сообщаемые SAX-анализатором, будут игнорироваться; однако, обычная обработка может не продолжаться. Настоятельно рекомендуется, чтобы все приложения SAX реализовывали обработчик ошибок, чтобы избежать неожиданных ошибок.
Приложения могут зарегистрировать новый или другой обработчик посреди разбора, и SAX-анализатор должен немедленно начать использовать новый обработчик.
- Параметры:
-
handler- Обработчик ошибок. - См. также:
getErrorHandler
ErrorHandler getErrorHandler()
- Возвращает:
- Текущий обработчик ошибок или null, если он не был зарегистрирован.
- См. также:
Обработка
void parse(InputSource input) throws IOException, SAXException
Приложение может использовать этот метод для указания XML-читателю начать обработку XML-документа из любого допустимого источника входных данных (потока символов, потока байтов или URI).
Приложения не должны вызывать этот метод, пока происходит обработка (они должны создать новый XMLReader вместо этого для каждого вложенного XML-документа). После завершения обработки приложение может повторно использовать тот же объект XMLReader, возможно, с другим источником входных данных. Конфигурация объекта XMLReader (например, привязки обработчиков и значения, установленные для флагов функций и свойств), не изменяется завершением обработки, если только определение этой части конфигурации явно не указывает другое поведение. (Например, флаги функций или свойства, раскрывающие характеристики обрабатываемого документа).
Во время обработки XMLReader предоставляет информацию о XML-документе через зарегистрированные обработчики событий.
Этот метод является синхронным: он не вернётся, пока обработка не закончится. Если клиентское приложение хочет прервать обработку досрочно, оно должно сгенерировать исключение.
- Параметры:
-
input- Источник входных данных для верхнего уровня XML-документа. - Исключения:
-
SAXException- Любое исключение SAX, возможно, содержащее другое исключение. -
IOException- Исключение ввода-вывода от парсера, возможно, из потока байтов или потока символов, предоставленного приложением. - См. также:
Обработка
void parse(String systemId) throws IOException, SAXException
Этот метод — сокращение для общего случая чтения документа по идентификатору системы. Он точно эквивалентен следующему:
parse(new InputSource(systemId));
Если идентификатор системы — URL, он должен быть полностью разрешен приложением перед передачей в парсер.
- Параметры:
-
systemId- Идентификатор системы (URI). - Исключения:
-
SAXException- Любое исключение SAX, возможно, содержащее другое исключение. -
IOException- Исключение ввода-вывода от парсера, возможно, из потока байтов или потока символов, предоставленного приложением. - См. также:
© 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/org/xml/sax/XMLReader.html