Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
YouTube 154 Подписчики
Telegram 241 Подписчики
VK 0 Подписчиков
Маркетер
Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • PHP

Использование транслятора XML в PHP

  • 29.10.2001

Автор статьи: Головин Андрей

Все вы, наверное, слышали о дальнейшем развитии языка HTML под названием XML (eXtensible Markup Language).
лучше понять суть этого языка можно на примере. Предположим, что вы разрабатываете сайт интернет-магазина. Как вы будете создавать дизайн описания товара? К примеру, так:
<B><DIV STYLE=»color: red, font-weight: bold»>Название товара.</DIV>
<DIV CLASS=»description>»>Описание товара.</DIV>
<DIV CLASS=»price»>320р.</DIV>
</B>
XML позволяет записать данный код гораздо проще:
<NAME>Название</NAME><
DESCRIPTION>Описание</DESCRIPTION>
<PRICE>320р.</PRICE>
XML позволяет полностью отделить содержание от дизайна. А это, одна из основных задач, стоящая перед разработчиками в настоящее время.
К сожалению, не все браузеры могут корректно интерпретировать этот язык. А те, которые могут, делают это еще не в полном объеме. Но некоторые наработки из этой области можно использовать для упрощения разработки страниц. Например, если у вас на странице присутствуют часто повторяющиеся варианты оформления (например, заголовки параграфов), то гораздо проще написать <SPAN class=tag><HEADER>Новости</HEADER>, чем <SPAN class=tag><DIV CLASS=»header»>Новости</DIV>
.
В языке PHP присутствует библиотека процессора XML. Для ее использования, первым делом, необходимо ее подключить. Для операционных систем Windows необходимо вписать в файл php3.ini строчку: &extension=php3_xml.dll. А для юникс-систем, необходимо произвести конфигурацию, запустив программу <B>configure</B> с ключом &—with-xml, предварительно выкачав библиотеку <A href=»http://www.jclark.com/xml/»>Expat</A> по адресу <A href=»http://www.jclark.com/xml/»>http://www.jclark.com/xml/</A>.
Теперь рассмотрим, как работает XML-процессор в PHP. Сначала создается экземпляр процессора функцией xml_parser_create(). Далее необходимо написать функции-обработчики событий. События возникают в те моменты, когда процессор встречает какую-либо часть текста в документе. Части текста бывают следующие (Рис.1):
<TABLE align=center border=0> <TBODY> <TR> <TD><center><img src=»/images/arti/blok10/0070_01.gif»></center></TD></TR> <TR> <TD align=right>Рис. 1.</TD></TR></TBODY></TABLE> На самом деле, существует еще несколько типов содержимого, но для нашей задачи этого достаточно.
Обработчик события обнаружения начального элемента будет вызываться в следующем виде: &startElement($parser, $name, $attrs), где &$parser — ссылка на текущий экземпляр XML-процессора, &$name — имя элемента (в нашем случае — HEADER), &$attrs — атрибуты элемента (каждый элемент XML может иметь атрибуты, как и любой элемент HTML, например, <HEADER COLOR=»red»>), содержащиеся в ассоциативном массиве (например &$attrs[«COLOR»] будет содержать &red в нашем случае).
Обработчик события обнаружения конечного элемента — в следующем: &endElements($parser, $name), где $parser — ссылка на текущий экземпляр XML-процессора, &$name — имя элемента (в нашем случае — HEADER).
А обработчик обнаружения содержания: elementContent($parser, $data), где $parser — ссылка на текущий экземпляр XML-процессора, &$data — содержание (в нашем случае — «Заголовок»).
Затем эти функции должны быть назначены, как обработчики событий функциями xml_set_element_handler() и xml_set_character_data_handler(). Первая функция
В нашем случае вызов функции xml_set_element_handler() будет выглядеть так: xml_set_element_handler($xml_parser, «startElement», «endElement»), а функции обработки содержания: xml_set_character_data_handler($xml_parser, «elementContents»).
Функция &startElement() должна будет заменить тэг <HEADER> на <DIV CLASS=»header»>, функция endElement() — тэг <SPAN class=tag></HEADER> на <SPAN class=tag></DIV>
, а функция elementContents() — просто вывести содержимое.
Кроме того, необходимо предусмотреть, чтобы неизвестные с точки зрения нашей программы тэги выводились без изменений. Это позволит нам расширять шаблоны по мере необходимости.
Таким образом программа интерпретации шаблона может выглядеть таким образом:
><?
$starts = array( "HEADER" => "<DIV CLASS=\"header\">"
);
$ends = array(
"HEADER" => "</DIV>
"
);
function printAttrs($attrs) {
// Функция вывода атрибутов "неизвестных" тэгов
while ( list($key,$val)=each($attrs) ) {
echo " $key=\"$val\"";
}
}
function startElement($parser, $name, $attrs) {
if ($starts[$name]) {
print $starts[$name];
} else {
print "<$name";
if (sizeof($attrs)>0) {
printAttrs($attrs);
}
print ">";
}
}
function endElement($parser, $name) {
if ($ends[$name]) {
print $ends[$name];
} else {
print "</$name>";
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler(
$xml_parser,
"startElement",
"endElement");
xml_set_character_data_handler(
$xml_parser,
"characterData");
xml_parser_set_option(
$xml_parser,
XML_OPTION_CASE_FOLDING,
true);
$fp = fopen("data.pxml", "r");
while ($data = fread($fp, 4096)) {
xml_parse($xml_parser, $data, feof($fp));
}
xml_parser_free($xml_parser);
$fclose($fp);
?>

Функция задания установок процессора XML (xml_parser_set_option()), несмотря на всю мудреность вызова производит преобразование названий элементов в верхний регистр.
Функция &xml_parse() запускает процесс обработки входных данных (&$data), а функция &xml_parser_free() — производит освобождение ресурсов, занятых про конкретный экземпляр процессора XML.
На самом деле, возможности данного метода, поистине, неограниченны. Кроме «тупого» замещения простых тэгов сложными конструкциями, возможно еще и создавать содержание «на лету». Но никаких объемов сайта не хватит, чтобы все это описать, да и всегда интереснее разобраться самому.

alexvolkov

Предыдущий материал
  • Все для разработчика

Локальная среда разработки

  • 29.10.2001
  • alexvolkov
Read More
Следующий материал
  • JavaScript

использование визуальных фильтров в IE 5

  • 29.10.2001
  • alexvolkov
Read More
Вас также может заинтересовать
Read More
  • Codeigniter

Создание собственного обработчика 404 ошибок в CodeIgniter

  • jokar
  • 07.10.2012
Read More
  • PHP
  • Готовые скрипты

Загрузка нескольких файлов одним браузером

  • jokar
  • 14.06.2010
Read More
  • PHP

Переход на шаблонный дизайн

  • Алексей Волков
  • 10.02.2006
Read More
  • PHP

Экстремальный стиль для PHP

  • Алексей Волков
  • 29.12.2005
Read More
  • PHP

Секреты PHP-функций для работы с массивами. Обработка данных и сортиров

  • Алексей Волков
  • 15.11.2005
Read More
  • PHP

Секреты PHP-функций для работы с массивами. Создание массивов

  • Алексей Волков
  • 31.08.2005
Read More
  • PHP

PHP: секреты файла php.ini. Часть 4

  • Алексей Волков
  • 04.08.2005
Read More
  • PHP

PHP: секреты файла php.ini. Часть 3

  • Алексей Волков
  • 29.07.2005

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Свежие посты
  • Дайджест постов Сергея Людкевича
    • 12.09.24
  • Как юристы тормозят бизнес
    • 30.08.24
  • Продвижение оптовых кампаний в Яндекс Директ
    • 06.03.24
  • Cарафанное радио
    • 13.01.24
  • 5-55: История компании
    • 01.03.23
Маркетер
  • О проекте
  • Информационное спонсорство
  • Рекламным агентствам
  • Ссылки
(с) ООО "Маркетер". Официальный сайт. Маркетер: Статьи про рекламу, маркетинг, public relations, интернет

Введите ключевые слова для поиска и нажмите Enter