j Листинг 20.12. Функция xml_set_element_handler_
<?php /*
** определение функций
*/
function cdataHandler($parser, $data) {
print($data);
}
function startHandler($parser, $name, $attributes)
{
switch($name)
{
case 'EXAMPLE':
print("<hr>n"); break;
case 'TITLE':
print("<b>");
break; case 'CODE':
print("<pre>");
break; default:
//пропускать другие теги
}
}
function endHandler($parser, $name)
{
switch($name)
{
case 'EXAMPLE':
print("<hr>n"); break;
case 'TITLE';
print("</b>");
break;
case 'CODE':
print("</pre>"); break; default:
//пропускать другие теги
}
}
function piHandler($parser, $target, $data)
{
if($target == "php")
{
eval($data);
}
else
{
print(htmlentities($data));
}
}
function defaultHandler($parser, $data)
{
global $defaultText; $defaultText .= $data;
}
function ndataHandler($parser, $name, $base, $systemID, $publicID, $notation)
{
print("<!--n");
print("NDATAn");
print("Объект: $namen"); print("База: $basen");
print("Идентификатор системы: $systemIDn"); print("Общий идентификатор: $publicIDn"); print("Запись: $notationn"); print("-->n");
}
function notationHandler($parser, $name, $base, $systemID, $publicID)
{
print("<!--n");
print(" Запись: $namen"); print(" База: $basen");
print(" Идентификатор системы: $systemIDn"); print(" Общий идентификатор: $publicIDn"); print("-->n");
}
function externalHandler($parser, $name, $base, $systemID, $publicID)
{
//здесь можно создать другую программу обработки print("<!--Загрузка $systemID-->n"); return(TRUE);
}
/*
** Инициализация
*/
// создать программу обработки if(!($parser = xml_parser_create()))
{
print("Невозможно создать программу обработки!<br>n"); exit();
}
// регистрация программ обработки
xml_set_character_data_handler($parser, "cdataHandler"); xml_set_element_handler($parser, "startHandler",
"endHandler");
xml_set_processing_instruction_handler($parser, "piHandler"); xml_set_default_handler($parser, "defaultHandler"); xml_set_unparsed_entity_decl_handler($parser, "ndataHandler"); xml_set_notation_decl_handler($parser, "notationHandler"); xml_set_external_entity_ref_handler($parser,
"externalHandler");
/*
** Анализ файла
*/
if(!($fp = fopen("corephp.xml", "r")))
{
print(" Невозможно открыть файл corephp.xml!<br>n");
xml_parser_free($parser);
exit();
}
while($line = fread($fp, 1024))
{
if(!xml_parse($parser, $line, feof($fp)))
{
//Ошибка, поэтому распечатывается полная информация print("ОШИБКА: " .
xml_error_string(xml_get_error_code($parser)) .
" в строке " . xml_get_current_line_number($parser) .
", столбец " . xml_get_current_column_number($parser) .
", байт " . xml_get_current_byte_index($parser) .
"<BR>n");
}
}
// удалить анализатор xml_parser_free($parser);
print("Текст обработан с помощью стандартной программы обработки:
n");
print("<pre>" . htmlentities($defaultText) . "</pre>n");
?>
boolean xml_set_end_namespace_decl_handler(resource parser, string function)
Функция xml_set_end_namespace_decl_handler управляет поиском конца декларации пространства имен. После этого программа обработки принимает один аргумент.
Кроме того, есть возможность определить функцию обработчика в виде метода класса или метода объекта, задав массив, состоящий их двух элементов. Первым элементом может быть имя класса или экземпляра, вторым элементом должно быть имя метода.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. XML-Документ. Часть Девятая.
12-05-2015
<< Предыдущая статья | Следующая статья >> |
PHP. XML-Документ. Часть Восьмая. | PHP. XML-Документ. Часть Десятая. |