ГЛАВА 14. РНР и XML
Подключение пользовательских функций к обработке XML
В РНР существует восемь стандартных функций для регистрации пользовательских функций, обрабатывающих различные компоненты документов XML.
Следует помнить, что вы обязательно должны определить все пользовательские функции; в противном случае произойдет ошибка. В этом разделе перечислены все стандартные функции регистрации и приведены спецификации всех пользовательских функций.
xml_set_character_data_handler()
Функция регистрирует пользовательскую функцию для работы с символьными данными. Синтаксис:
int xml_set_character_data_handler(int анализатор, string обработчик_символьных_данных)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой при обработке символьных данных. Определение функции-обработчика должно выглядеть так:
function обработчик_символьных_данных(int анализатор, string данные) {
...
}
Первый параметр определяет анализатор XML, а второй — символьные данные, подлежащие обработке.
xml_set_default_handler()
Функция регистрирует пользовательскую функцию для всех незарегистрированных компонентов документа XML. В частности, к числу таких компонентов относятся пролог XML и комментарии. Синтаксис:
int xml_set_default_handler(int анализатор, string обработчик_по_умолчанию)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой по умолчанию. Определение функции-обработчика должно выглядеть так:
function обработчик_по_умолчанию(int анализатор, string данные) {
...
}
Первый параметр определяет анализатор XML, а второй — символьные данные, подлежащие обработке.
xml_set_element_handler()
Функция регистрирует пользовательские функции для обработки открывающих и закрывающих тегов элементов. Синтаксис:
int xml_set_element_handler(int анализатор, string обработчик_открывающих_тегов, string обработчик_закрывающих_тегов)
Первый параметр определяет анализатор XML. Второй и третий параметры определяют имена функций, используемых для обработки, соответственно, открывающих и закрывающих тегов. Определение обработчика открывающих тегов должно выглядеть так:
function обработчик_открывающих_тегов(int анализатор, string имя_тега,
string атрибуты[ ]) {
...
}
Первый параметр определяет анализатор XML, второй — имя открывающего тега для анализируемого элемента, а третий содержит массив атрибутов соответствующего тега.
Обработчик закрывающих тегов определяется следующим образом:
function обработчик_закрывающих_тегов(int анализатор, string имя_тега) {
...
}
Первый параметр определяет анализатор XML, второй — имя закрывающего тега для анализируемого элемента.
xml_set_external_entity_ref_handler()
Функция регистрирует пользовательскую функцию для обработки внешних ссылок на сущности. Синтаксис:
int xml_set_external_entity_ref_handler(int анализатор, string обработчик_внешних_ссылок)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой при обработке внешних ссылок. Определение функции-обработчика должно выглядеть так:
function обработчик_внешних_ссылок(int анализатор, string ссылка,
string база. string системный_идентификатор, string открытый_идентификатор) {
...
}
Первый параметр определяет анализатор XML. Второй параметр определяет имя ссылки, четвертый — системный идентификатор ссылки на сущность, а пятый — открытый идентификатор ссылки. Третий параметр, база, в настоящее время не используется, однако его объявление все равно обязательно.
xml_set_notation_decl_handler()
Функция регистрирует пользовательскую функцию для обработки синтаксических объявлений. Синтаксис:
int xml_set_notation_decl_handler(int анализатор, string обработчик_синтаксических_обьявлений)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой при обработке синтаксических объявлений. Определение функции-обработчика должно выглядеть так:
function обработчик_синтаксических_обьявлений(int анализатор,
string ссылка, string база, string системный_идентификатор,
string открытый_идентификатор) {
...
}
Первый параметр определяет анализатор XML. Второй параметр определяет имя объявления, четвертый — системный идентификатор, а пятый — открытый идентификатор объявления. Третий параметр, база, в настоящее время не используется, однако его объявление все равно обязательно.
xml_set_object()
Функция ассоциирует анализатор XML с некоторым объектом. Синтаксис:
void xml_set_object(int анализатор, object &о6ъект)
Первый параметр определяет анализатор XML, а второй содержит ссылку на объект, методы которого будут использоваться для обработки компонентов XML. Таким образом, функция xml_set_object связывает анализатор с объектом. Как правило, она вызывается в конструкторе объекта перед определениями функций-обработчиков:
class xmlDB {
VAR $xmlparser:
function xmlDB() {
$this->xmlparser = xml_parser_create();
// Связать анализатор с объектом
xml_set_object($this->xmlparser. &$this);
// Определить функции-обработчики
xml_set_element_handler($this->xmlparser,"startTag","endTag");
xml_set_character_data($this->xmlparser,"characterData");
}
... Определения функций-обработчиков startTag. endTag. characterData и т.д. ...
} // class xmlDB
В порядке эксперимента попробуйте закомментировать вызов xml_set_object(). Вы увидите, что при выполнении этого фрагмента выводятся сообщения об ошибках, в которых говорится о невозможности обращения к методам объекта.
xml_set_processing_instruction_handler()
Функция регистрирует пользовательскую функцию для работы с Pi-инструкциями.
Синтаксис:
int xml_set_processing_instruction_handler(int анализатор, string обработчик_инструкций)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой при обработке Pi-инструкций. Определение функции-обработчика должно выглядеть так:
function обработчик_инструкций(int анализатор, string приложение, string инструкция) {
...
}
Первый параметр определяет анализатор XML, второй — имя приложения, выполняющего инструкции, а третий — инструкцию, передаваемую приложению.
xml_set_unparsed_entity_decl_handler()
Функция регистрирует пользовательскую функцию для необработанных внешних ссылок на сущности. Синтаксис:
int xml_set_external_entity_ref_handler(int анализатор, string обработчик_внешних_ссылок)
Первый параметр определяет анализатор XML, а второй — имя пользовательской функции, используемой для обработки необработанных внешних ссылок. Определение функции-обработчика должно выглядеть так:
function обработчик_внешних_ссылок(int анализатор, string сущность,
string база, string системный_идентификатор,
string открытый_идентификатор, string имя_объявления) {
...
}
Первый параметр определяет анализатор XML. Второй параметр определяет имя ссылки, четвертый — системный идентификатор ссылки на сущность, а пятый — открытый идентификатор ссылки. Третий параметр, база, в настоящее время не используется, однако его объявление все равно обязательно. Наконец, последний параметр определяет имя синтаксического объявления.
На этом завершается наше краткое знакомство с обработчиками и функциями регистрации. Впрочем, для эффективной обработки документов XML вам понадобятся и другие функции. В следующем разделе представлены остальные функции РНР, связанные с обработкой кода XML.
Назад |
Содержание раздела |
Общее Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|