Функции Язык программирования PHP

xslt_process

(PHP 4 >= 4.0.3)

xslt_process - выполняет XSLT-трансформацию.

Описание

mixed xslt_process (resource xh, string xml, string xsl [, string result [, array arguments [, array parameters]]])

xslt_process() это краеугольный камень нового расширения XSLT. Она даёт возможность выполнять XSLT-трансформацию с использованием почти всех типов источников ввода. Это делается с помощью буферов аргументов -- концепции, взятой из Sablotron XSLT-процессора (в настоящее время - единственного XSLT-процессора, который поддерживается данным расширением).

Самая простая трансформация функцией xslt_process() - это трансформация XML-файла XSLT-файлом с помещением результата в третий файл, содержащий новый XML (или HTML)-документ. Сделать это с помощью sablotron действительно довольно легко ...

Пример 1. Использование xslt_process() для трансформации XML-файла и
XSL-файла в новый XML-файл
<?php 
// Разместить новый XSLT-процессор $xh = xslt_create(); // Обработать документ 
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) { print "SUCCESS, 
sample.xml was transformed by sample.xsl into result.xml"; print ", result.xml 
has the following contents\n<br>\n"; print "<pre>\n"; readfile('result.xml'); 
print "</pre>\n"; } else { print "Sorry, sample.xml could not be transformed 
by sample.xsl into"; print " result.xml the reason is that " . xslt_error($xh) 
. " and the "; print "error code is " . xslt_errno($xh); } xslt_free($xh); ?>

Хотя эта функциональность великолепна, часто, особенно в окружении web, вам понадобится выводить результату напрямую. Следовательно, если вы опустите третий аргумент для функции xslt_process() (или предоставите NULL-значение этого аргумента), она автоматически возвратит значение XSLT-трансформации, вместо записи его в файл ...

Пример 2. Использование xslt_process() для трансформации XML-файла и XSL-файла в переменную, содержащую результирующие XML-данные
<?php // Разместить новый XSLT-процессор $xh = xslt_create(); // 
обработать документ, возвращая результат в переменной $result $result = xslt_process($xh, 
'sample.xml', 'sample.xsl'); if ($result) { print "SUCCESS, sample.xml was transformed 
by sample.xsl into the \$result"; print " variable, the \$result variable has 
the following contents\n<br>\n"; print "<pre>\n"; print $result; 
print "</pre>\n"; } else { print "Sorry, sample.xml could not be transformed 
by sample.xsl into"; print " the \$result variable the reason is that " . xslt_error($xh) 
. print " and the error code is " . xslt_errno($xh); } xslt_free($xh); ?>

Это были два простейших случая XSLT-транфсормации, и я могу с уверенностью сказать - самые распространённые случаи, однако иногда вы получаете ваш XML и XSLT-код из внешних источников, таких как БД или сокет. В этих случаях у вас будут XML и/или XSLT-данные в переменной -- и в работающих приложениях перегрузка при дампе их в файл может оказаться значительной. Вместо файлов как аргументов XML и XSLT для xslt_process(), вы можете специфицировать "заглушки документов", которые затем замещаются значениями из массива аргументов (5-й параметр функции xslt_process()). Далее идёт пример процессинга XML и XSLT в результирующую переменную вообще без использования файлов.

Пример 3. Использование xslt_process() для трансформации переменной, содержащей XML-данные, и переменной, содержащей XSL-данные, в переменную, содержащую результирующие XML-данные
<?php 
// $xml и $xsl содержат XML и XSL-данные $arguments = array( '/_xml' => $xml, 
'/_xsl' => $xsl ); // разместить новый XSLT-процессор $xh = xslt_create(); 
// обработать документ $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, 
$arguments); if ($result) { print "SUCCESS, sample.xml was transformed by sample.xsl 
into the \$result"; print " variable, the \$result variable has the following 
contents\n<br>\n"; print "<pre>\n"; print $result; print "</pre>\n"; 
} else { print "Sorry, sample.xml could not be transformed by sample.xsl into"; 
print " the \$result variable the reason is that " . xslt_error($xh) . print " 
and the error code is " . xslt_errno($xh); } xslt_free($xh); ?>

Наконец, последний аргумент функции xslt_process() это любые параметры, которые вы хотите передать в XSLT-документ. Можно получить доступ к этим параметрам внутри ваших XSL-файлов с помощью инструкции <xsl:param name="parameter_name">.


НазадОглавление Вперёд
xslt_freeВверхxslt_set_base

Добавление директив конфигурации времени прогона/runtime

Многие свойства PHP могут конфигурироваться на этапе прогона программы. Эти директивы конфигурации могут появляться или в файле php3.ini, или - в случае с версией Apache-модуля - Apache .conf-файлах. Преимущество их присутствия в Apache .conf-файлах заключается в том, что они могут быть сконфигурированы на уровне директорий. Это означает, что одна директория может иметь одну safemodeexecdir, например, а другая директория - другую. Эта дробность конфигурации особенно необходима, когда сервер поддерживает наличие несколько виртуальных хостов.

Вот шаги по добавлению новой директивы:

  1. Добавить директиву в структуру php3_ini_structure в mod_php3.h.

  2. В main.c отредактировать функцию php3_module_startup и добавить соответствующий вызов cfg_get_string() или cfg_get_long().

  3. Добавить директиву, ограничения и комментарий в структуру php3_commands в mod_php3.c. Обратите внимание на часть restrictions/ограничений. RSRC_CONF являются директивами, которые могут находится только в текущих Apache .conf-файлах. Любые директивы OR_OPTIONS могут находиться в любом месте, включая нормальные .htaccess-файлы.

  4. В php3take1handler() или в php3flaghandler() добавить соответствующее вхождение для вашей директивы.

  5. В разделе конфигурации/configuration функции _php3_info() в functions/info.c вам необходимо добавить вашу новую директиву.

  6. И наконец - вы, конечно, должны использовать новую вашу директиву где-нибудь. Она будет адресоваться как php3_ini.directive.