boolean xml_set_external_entity_ref_handler(resource parser, string function)
XML-объекты соответствуют по форме HTML-объектам. Они начинаются символом & и заканчиваются двоеточием. Между двумя этими символами задается имя объекта. Внешний объект определяется в другом файле. В XML-файле это принимает вид <!ENTITY externalEntity SYSTEM "entities.xml">. И всякий раз, когда эта конструкция попадается в теле XML-файла, вызывается программа обработки, заданная функцией xml_set_external_entity_ref_handler. Программа обработки должна принимать пять аргументов. Первым является идентификатор программы-анализатора, вторым - строка, содержащая имена объектов, открытых для этой программы обработки. После этого наступает очередь базы, идентификатора системы и общего идентификатора. 
Кроме того, существует возможность определить функцию обработчика в виде метода класса или метода объекта, задав массив, состоящий их двух элементов. Первым элементом может быть имя класса или экземпляра, вторым элементом должно быть имя метода.
boolean xml_set_notation_decl_handler(resource parser, string function)
Программа обработки, зарегистрированная с помощью функции xml_set_ notation_decl_handler, принимает объявления записей, имеющих вид <!NOTATION jpg SYSTEM "/usr/local/bin/jview"> и предназначенных для указания программы обработки данного типа данных.
Программа обработки должна принимать пять аргументов. Первым является иден­тификатор программы-анализатора, вторым - имя объекта записи. После этого наступает очередь базы, идентификатора системы и общего идентификатора. Кроме того, есть возможность определить функцию обработчика в виде метода класса или метода объекта, задав массив, состоящий их двух элементов. Первым элементом может быть имя класса или экземпляра, вторым элементом должно быть имя метода.
xml_set_object(resource parser, object container)
Функция xml_set_object (листинг 20.13) ассоциирует объект с анализатором. Ей необходимо передать идентификатор анализатора и ссылку на объект. Это лучше всего делать внутри объекта, используя соответствующую переменную. После использования этой функции PHP при упоминании этих программ обработки вызывает методы вместо функций в глобальном диапазоне.

Листинг 20.13. Функция xml_set_object

<?php
class myParser
{
var $parser;
function parse($filename)
{
// создать анализатор
if(!($this->parser = xml_parser_create()))
{
print("Невозможно создать анализатор!<br>"); exit();
}
// ассоциировать анализатор с объектом xml_set_object($this->parser, $this); // зарегистрировать программы обработки xml_set_character_data_handler($this->parser,
"cdataHandler"); xml_set_element_handler($this->parser,
"startHandler", "endHandler");
/*
** Проанализировать файл
*/ 
if(!($fp = fopen($filename, "r")))
{
print(" Нельзя открыть файл example.xml!<br>");
xml_parser_free($this->parser);
return;
}
while($line = fread($fp, 1024))
{
xml_parse($this->parser, $line, feof($fp));
}
// удалить анализатор xml_parser_free($this->parser);
}
function cdataHandler($parser, $data)
{
print($data);
}
function startHandler($parser, $name, $attributes)
{
switch($name)
{
case 'EXAMPLE':
print("<hr>"); break;
case 'TITLE':
print("<b>"); break;
case 'CODE':
print("<pre>"); break; default:
// проигнорировать другие теги
}
}
function endHandler($parser, $name)
{
switch($name)
{
case 'EXAMPLE':
print("<hr>"); break;
case 'TITLE';
print("</b>");
break;
case 'CODE':
print("</pre>"); break; default:
// игнорировать другие теги
}
}
}
$p = new myParser; $p->parse("corephp.xml");
?>