ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. XML-Документ. Часть Десятая.


13-05-2015

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");
?>

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. XML-Документ. Часть Девятая. PHP. XML-Документ. Часть Одиннадцатая.