Spec-Zone.ru › OpenJDK 25

Интерфейс ContentHandler

Все известные подинтерфейсы:
TemplatesHandler, TransformerHandler
Все известные реализующие классы:
DefaultHandler, DefaultHandler2, ValidatorHandler, XMLFilterImpl, XMLReaderAdapter
public interface ContentHandler
Получает уведомления о логическом содержимом документа.

Это основной интерфейс, который реализует большинство приложений SAX: если приложению необходимо получать уведомления об основных событиях разбора, оно реализует этот интерфейс и регистрирует его экземпляр в анализаторе SAX с помощью метода setContentHandler. Анализатор использует этот экземпляр для передачи основных событий, связанных с документом, например начала и конца элементов и символьных данных.

Порядок событий в этом интерфейсе очень важен и повторяет порядок информации в самом документе. Например, всё содержимое элемента (символьные данные, инструкции обработки и/или вложенные элементы) будет последовательно передаваться между событием startElement и соответствующим событием endElement.

Этот интерфейс похож на устаревший интерфейс DocumentHandler из SAX 1.0, но поддерживает пространства имён и передачу сведений о пропущенных сущностях (в XML-процессорах без проверки корректности).

Разработчикам следует учитывать, что в пакете java.net также есть класс ContentHandler; это означает, что, вероятно, не стоит делать следующее:

import java.net.*;
import org.xml.sax.*;

На самом деле конструкция «import ...*» обычно и без того свидетельствует о небрежном программировании, поэтому пользователю следует считать это особенностью, а не ошибкой.

Начиная с версии:
1.4, SAX 2.0
См. также:
  • XMLReader
  • DTDHandler
  • ErrorHandler

Краткое описание методов

Модификатор и тип Метод Описание
void characters(char[] ch, int start, int length)
Получает уведомление о символьных данных.
default void declaration(String version, String encoding, String standalone)
Получает уведомление об XML-декларации.
void endDocument()
Получает уведомление о завершении документа.
void endElement(String uri, String localName, String qName)
Получает уведомление о завершении элемента.
void endPrefixMapping(String prefix)
Завершает область действия сопоставления префикса с URI.
void ignorableWhitespace(char[] ch, int start, int length)
Получает уведомление о незначащих пробельных символах в содержимом элемента.
void processingInstruction(String target, String data)
Получает уведомление об инструкции обработки.
void setDocumentLocator(Locator locator)
Получает объект, позволяющий определить источник событий документа SAX.
void skippedEntity(String name)
Получает уведомление о пропущенной сущности.
void startDocument()
Получает уведомление о начале документа.
void startElement(String uri, String localName, String qName, Attributes atts)
Получает уведомление о начале элемента.
void startPrefixMapping(String prefix, String uri)
Начинает область действия сопоставления пространства имён «префикс–URI».

Подробное описание методов

setDocumentLocator

void setDocumentLocator(Locator locator)
Получает объект, позволяющий определить источник событий документа SAX.

Настоятельно рекомендуется, хотя и не является обязательным, чтобы анализаторы SAX предоставляли локатор. Если анализатор это делает, он должен передать локатор приложению, вызвав этот метод до вызова любых других методов интерфейса ContentHandler.

Локатор позволяет приложению определить конечную позицию любого события, связанного с документом, даже если анализатор не сообщает об ошибке. Обычно приложение использует эту информацию для сообщения о собственных ошибках (например, если символьное содержимое не соответствует бизнес-правилам приложения). Информация, возвращаемая локатором, вероятно, недостаточна для использования поисковой системой.

Обратите внимание: локатор возвращает правильную информацию только во время обратных вызовов обработчиков событий SAX после возврата из startDocument и до вызова endDocument. Приложению не следует использовать его в любое другое время.

Параметры:
locator — объект, который может возвращать местоположение любого события документа SAX
См. также:
  • Locator

startDocument

void startDocument() throws SAXException
Получает уведомление о начале документа.

Анализатор SAX вызывает этот метод только один раз, перед любыми другими обратными вызовами обработчиков событий (за исключением setDocumentLocator).

Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение
См. также:
  • endDocument()

declaration

default void declaration(String version, String encoding, String standalone) throws SAXException
Получает уведомление об XML-декларации.
Требования к реализации:
Реализация по умолчанию в API SAX ничего не делает.
Параметры:
version — строка версии из входного документа; null, если она не указана
encoding — строка кодировки из входного документа; null, если она не указана
standalone — строка standalone из входного документа; null, если она не указана
Исключения:
SAXException — если приложение хочет сообщить об ошибке или прервать процесс разбора
Начиная с версии:
14

endDocument

void endDocument() throws SAXException
Получает уведомление о завершении документа.

Этот метод вызывается анализатором, чтобы сообщить о достижении конца документа после успешного завершения процесса разбора. После этого события анализатор передаёт управление приложению.

Примечание к API:
В случае неисправимой ошибки анализатор может остановить процесс разбора, выбросив SAXException; в таком случае этот метод вызван не будет. См. ErrorHandler.fatalError(org.xml.sax.SAXParseException).
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение
См. также:
  • startDocument()

startPrefixMapping

void startPrefixMapping(String prefix, String uri) throws SAXException
Начинает область действия сопоставления пространства имён «префикс–URI».

Информация из этого события не требуется для обычной обработки пространств имён: XML-считыватель SAX автоматически заменяет префиксы в именах элементов и атрибутов, когда функция http://xml.org/sax/features/namespaces имеет значение true (по умолчанию).

Однако иногда приложениям необходимо использовать префиксы в символьных данных или значениях атрибутов, где их нельзя безопасно раскрыть автоматически; событие start/endPrefixMapping предоставляет приложению информацию, необходимую для самостоятельного раскрытия префиксов в этих контекстах, если это требуется.

Обратите внимание: события start/endPrefixMapping не обязательно должны быть правильно вложены относительно друг друга: все события startPrefixMapping происходят непосредственно перед соответствующим событием startElement, а все события endPrefixMapping — непосредственно после соответствующего события endElement, но в остальном порядок этих событий не гарантируется.

События start/endPrefixMapping для префикса «xml» возникать не должны, поскольку он предварительно объявлен и неизменяем.

Параметры:
prefix — объявляемый префикс пространства имён. Для пространства имён элемента по умолчанию, у которого нет префикса, используется пустая строка.
uri — URI пространства имён, которому сопоставлен префикс
Исключения:
SAXException — клиент может выбросить исключение во время обработки
См. также:
  • endPrefixMapping(String)
  • startElement(String, String, String, Attributes)

endPrefixMapping

void endPrefixMapping(String prefix) throws SAXException
Завершает область действия сопоставления префикса с URI.

Подробности см. в описании startPrefixMapping. Эти события всегда происходят непосредственно после соответствующего события endElement, однако порядок событий endPrefixMapping в остальном не гарантируется.

Параметры:
prefix — префикс, сопоставление для которого завершено. При завершении области действия сопоставления по умолчанию используется пустая строка.
Исключения:
SAXException — клиент может выбросить исключение во время обработки
См. также:
  • startPrefixMapping(String, String)
  • endElement(String, String, String)

startElement

void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException
Получает уведомление о начале элемента.

Анализатор вызывает этот метод в начале каждого элемента XML-документа; каждому событию startElement соответствует событие endElement (даже если элемент пуст). Всё содержимое элемента будет передано по порядку до соответствующего события endElement.

Это событие может содержать до трёх компонентов имени каждого элемента:

  1. URI пространства имён;
  2. локальное имя; и
  3. полное имя (с префиксом).

В зависимости от значений свойств http://xml.org/sax/features/namespaces и http://xml.org/sax/features/namespace-prefixes могут быть предоставлены все или некоторые из этих компонентов:

  • URI пространства имён и локальное имя обязательны, если свойство namespaces имеет значение true (по умолчанию), и необязательны, если свойство namespaces имеет значение false (если указано одно из них, должны быть указаны оба);
  • полное имя обязательно, если свойство namespace-prefixes имеет значение true, и необязательно, если свойство namespace-prefixes имеет значение false (по умолчанию).

Обратите внимание: передаваемый список атрибутов будет содержать только атрибуты с явными значениями (указанными или заданными по умолчанию); атрибуты #IMPLIED будут опущены. Список атрибутов будет содержать атрибуты, используемые для объявлений пространств имён (атрибуты xmlns*), только если свойство http://xml.org/sax/features/namespace-prefixes имеет значение true (по умолчанию оно равно false; поддержка значения true необязательна).

Как и в случае с characters(), значения атрибутов могут содержать символы, для представления которых требуется более одного значения char.

Параметры:
uri — URI пространства имён или пустая строка, если у элемента нет URI пространства имён либо обработка пространств имён не выполняется
localName — локальное имя (без префикса) или пустая строка, если обработка пространств имён не выполняется
qName — полное имя (с префиксом) или пустая строка, если полные имена недоступны
atts — атрибуты элемента. Если атрибутов нет, должен использоваться пустой объект Attributes. Значение этого объекта после возврата из startElement не определено
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение
См. также:
  • endElement(String, String, String)
  • Attributes
  • AttributesImpl

endElement

void endElement(String uri, String localName, String qName) throws SAXException
Получает уведомление о завершении элемента.

Анализатор SAX вызывает этот метод в конце каждого элемента XML-документа; каждому событию endElement соответствует событие startElement (даже если элемент пуст).

Сведения об именах см. в описании startElement.

Параметры:
uri — URI пространства имён или пустая строка, если у элемента нет URI пространства имён либо обработка пространств имён не выполняется
localName — локальное имя (без префикса) или пустая строка, если обработка пространств имён не выполняется
qName — полное имя XML (с префиксом) или пустая строка, если полные имена недоступны
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение

characters

void characters(char[] ch, int start, int length) throws SAXException
Получает уведомление о символьных данных.

Анализатор вызывает этот метод для передачи каждого фрагмента символьных данных. Анализаторы SAX могут вернуть все непрерывные символьные данные одним фрагментом или разделить их на несколько фрагментов; однако все символы в одном событии должны происходить из одной и той же внешней сущности, чтобы локатор предоставлял полезную информацию.

Приложение не должно пытаться считывать данные из массива за пределами указанного диапазона.

Для представления отдельных символов может потребоваться более одного значения char в Java. Есть два важных случая, когда это происходит, поскольку символы нельзя представить всего шестнадцатью битами. В одном случае символы представлены суррогатной парой с использованием двух специальных значений Unicode. Такие символы находятся в так называемых «астральных плоскостях» и имеют кодовую точку выше U+FFFF. Второй случай связан с составными символами, например базовым символом, объединённым с одним или несколькими диакритическими знаками.

Ваш код не должен предполагать, что алгоритмы, использующие идиомы обработки по одному char, работают с единицами символов; в некоторых случаях они будут разделять символы. Это важно везде, где XML допускает произвольные символы, например в значениях атрибутов, данных инструкций обработки и комментариях, а также в данных, передаваемых этим методом. Обычно это важно и при обработке интернационализированного текста в коде Java; проблема характерна не только для XML.

Обратите внимание: некоторые анализаторы передают пробельные символы в содержимом элемента с помощью метода ignorableWhitespace, а не этого метода (проверяющие корректность анализаторы обязаны так делать).

Параметры:
ch — символы из XML-документа
start — начальная позиция в массиве
length — количество символов для чтения из массива
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение
См. также:
  • ignorableWhitespace(char[], int, int)
  • Locator

ignorableWhitespace

void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
Получает уведомление о незначащих пробельных символах в содержимом элемента.

Проверяющие корректность анализаторы обязаны использовать этот метод для передачи каждого фрагмента пробельных символов в содержимом элемента (см. рекомендацию W3C XML 1.0, раздел 2.10); анализаторы без проверки корректности также могут использовать этот метод, если способны разбирать модели содержимого и применять их.

Анализаторы SAX могут вернуть все непрерывные пробельные символы одним фрагментом или разделить их на несколько фрагментов; однако все символы в одном событии должны происходить из одной и той же внешней сущности, чтобы локатор предоставлял полезную информацию.

Приложение не должно пытаться считывать данные из массива за пределами указанного диапазона.

Параметры:
ch — символы из XML-документа
start — начальная позиция в массиве
length — количество символов для чтения из массива
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение
См. также:
  • characters(char[], int, int)

processingInstruction

void processingInstruction(String target, String data) throws SAXException
Получает уведомление об инструкции обработки.

Анализатор вызывает этот метод один раз для каждой найденной инструкции обработки: обратите внимание, что инструкции обработки могут находиться до или после основного элемента документа.

Анализатор SAX не должен передавать этим методом XML-декларацию (XML 1.0, раздел 2.8) или текстовую декларацию (XML 1.0, раздел 4.3.1).

Как и в случае с characters(), данные инструкции обработки могут содержать символы, для представления которых требуется более одного значения char.

Параметры:
target — цель инструкции обработки
data — данные инструкции обработки или null, если они не заданы. Данные не включают пробельные символы, отделяющие их от цели
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение

skippedEntity

void skippedEntity(String name) throws SAXException
Получает уведомление о пропущенной сущности. Этот метод не вызывается для ссылок на сущности внутри конструкций разметки, например начальных тегов элементов или объявлений разметки. (Рекомендация XML требует сообщать о пропущенных внешних сущностях. SAX также сообщает о раскрытии или нераскрытии внутренних сущностей, за исключением случаев, когда они находятся внутри конструкций разметки.)

Анализатор вызывает этот метод каждый раз, когда сущность пропускается. Процессоры без проверки корректности могут пропускать сущности, если им неизвестны объявления (например, если сущность объявлена во внешнем подмножестве DTD). Все процессоры могут пропускать внешние сущности в зависимости от значений свойств http://xml.org/sax/features/external-general-entities и http://xml.org/sax/features/external-parameter-entities.

Параметры:
name — имя пропущенной сущности. Если это параметрическая сущность, имя начинается с «%», а если это внешнее подмножество DTD, используется строка «[dtd]»
Исключения:
SAXException — любое исключение SAX, возможно, оборачивающее другое исключение

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, способы обхода ограничений и примеры рабочего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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/ContentHandler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API