Интерфейс 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, 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/ext/LexicalHandler.html