Интерфейс LexicalHandler
- Все известные подинтерфейсы:
TransformerHandler
- Все известные реализующие классы:
DefaultHandler2
public interface LexicalHandler
Это дополнительный обработчик расширения SAX2, предназначенный для предоставления лексической информации об XML-документе, например комментариев и границ секций CDATA. XML-считыватели не обязаны распознавать этот обработчик, и он не входит в дистрибутивы SAX2, содержащие только ядро.
События лексического обработчика относятся ко всему документу, а не только к элементу документа, и все события лексического обработчика должны происходить между событиями startDocument и endDocument обработчика содержимого.
Чтобы задать LexicalHandler для XML-считывателя, используйте метод setProperty с именем свойства http://xml.org/sax/properties/lexical-handler и объектом, реализующим этот интерфейс (или null), в качестве значения. Если считыватель не сообщает о лексических событиях, при попытке зарегистрировать обработчик будет выброшено исключение SAXNotRecognizedException.
- Начиная с версии:
- 1.4, SAX 2.0 (расширения 1.0)
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
comment |
Сообщает о комментарии XML в любом месте документа. |
void |
endCDATA() |
Сообщает о завершении секции CDATA. |
void |
endDTD() |
Сообщает о завершении объявлений DTD. |
void |
endEntity |
Сообщает о завершении сущности. |
void |
startCDATA() |
Сообщает о начале секции CDATA. |
void |
startDTD |
Сообщает о начале объявлений DTD, если они есть. |
void |
startEntity |
Сообщает о начале некоторых внутренних и внешних XML-сущностей. |
Подробное описание методов
startDTD
void startDTD(String name, String publicId, String systemId) throws SAXException
Этот метод предназначен для сообщения о начале объявления DOCTYPE; если в документе нет объявления DOCTYPE, этот метод вызван не будет.
Все объявления, о которых сообщают события DTDHandler или DeclHandler, должны находиться между событиями startDTD и endDTD. Предполагается, что объявления относятся к внутреннему подмножеству DTD, если только они не находятся между событиями startEntity и endEntity. Комментарии и инструкции обработки из DTD также должны сообщаться между событиями startDTD и endDTD в исходном порядке их (логического) появления; однако они не обязаны находиться в правильных позициях относительно событий DTDHandler или DeclHandler.
Обратите внимание, что события start/endDTD будут происходить внутри событий start/endDocument обработчика ContentHandler и перед первым событием startElement.
- Параметры:
-
name— Имя типа документа. -
publicId— Объявленный публичный идентификатор внешнего подмножества DTD или null, если он не был объявлен. -
systemId— Объявленный системный идентификатор внешнего подмножества DTD или null, если он не был объявлен. (Обратите внимание, что он не разрешается относительно базового URI документа.) - Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
endDTD
void endDTD() throws SAXException
Этот метод предназначен для сообщения о завершении объявления DOCTYPE; если в документе нет объявления DOCTYPE, этот метод вызван не будет.
- Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
startEntity
void startEntity(String name) throws SAXException
Сообщение о параметрических сущностях (включая внешнее подмножество DTD) является необязательным, и драйверы SAX2, сообщающие о событиях LexicalHandler, могут не реализовывать эту возможность; для запроса или управления сообщением о параметрических сущностях можно использовать функцию http://xml.org/sax/features/lexical-handler/parameter-entities.
Об общих сущностях сообщается с использованием их обычных имён, к именам параметрических сущностей добавляется префикс '%', а для внешнего подмножества DTD используется псевдоимя сущности "[dtd]".
Если драйвер SAX2 предоставляет эти события, все остальные события должны быть правильно вложены в события start/end entity. Дополнительных требований к правильному порядку событий DeclHandler или DTDHandler нет.
Обратите внимание, что о пропущенных сущностях сообщается через событие skippedEntity, входящее в интерфейс ContentHandler.
Из-за потоковой модели событий, используемой SAX, в некоторых случаях невозможно сообщить о границах сущностей:
- общие сущности в значениях атрибутов
- параметрические сущности в объявлениях
Они будут раскрыты без уведомления и без указания исходных границ сущностей.
Также обратите внимание, что о границах символьных ссылок (которые, строго говоря, не являются сущностями) не сообщается.
Все события start/endEntity должны быть правильно вложены.
- Параметры:
-
name— Имя сущности. Если это параметрическая сущность, имя будет начинаться с '%', а если это внешнее подмножество DTD, оно будет иметь значение "[dtd]". - Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
endEntity
void endEntity(String name) throws SAXException
- Параметры:
-
name— Имя завершающейся сущности. - Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
startCDATA
void startCDATA() throws SAXException
Содержимое секции CDATA будет передано через обычное событие characters; это событие предназначено только для сообщения о границе секции.
- Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
endCDATA
void endCDATA() throws SAXException
- Выбрасывает:
-
SAXException— Приложение может вызвать исключение. - См. также:
comment
void comment(char[] ch, int start, int length) throws SAXException
Этот обратный вызов используется для комментариев внутри и вне элемента документа, включая комментарии во внешнем подмножестве DTD (если оно считывается). Комментарии в DTD должны быть правильно вложены в события start/endDTD и start/endEntity (если используются).
- Параметры:
-
ch— Массив, содержащий символы комментария. -
start— Начальная позиция в массиве. -
length— Количество символов, используемых из массива. - Выбрасывает:
-
SAXException— Приложение может вызвать исключение.
© 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://docs.oracle.com/en/java/javase/25/docs/api/java.xml/org/xml/sax/ext/LexicalHandler.html