PHP 4 на практике

       

Подключение пользовательских функций к обработке 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.


Содержание раздела