 |
(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">. |  |
|
Многие свойства PHP могут конфигурироваться на этапе прогона программы. Эти
директивы конфигурации могут появляться или в файле php3.ini, или - в случае
с версией Apache-модуля - Apache .conf-файлах. Преимущество их присутствия в
Apache .conf-файлах заключается в том, что они могут быть сконфигурированы на
уровне директорий. Это означает, что одна директория может иметь одну safemodeexecdir,
например, а другая директория - другую. Эта дробность конфигурации особенно
необходима, когда сервер поддерживает наличие несколько виртуальных хостов.
Вот шаги по добавлению новой директивы:
-
Добавить директиву в структуру php3_ini_structure в mod_php3.h.
-
В main.c отредактировать функцию php3_module_startup и добавить соответствующий
вызов cfg_get_string() или cfg_get_long().
-
Добавить директиву, ограничения и комментарий в структуру php3_commands
в mod_php3.c. Обратите внимание на часть restrictions/ограничений. RSRC_CONF
являются директивами, которые могут находится только в текущих Apache .conf-файлах.
Любые директивы OR_OPTIONS могут находиться в любом месте, включая нормальные
.htaccess-файлы.
-
В php3take1handler() или в php3flaghandler() добавить соответствующее вхождение
для вашей директивы.
-
В разделе конфигурации/configuration функции _php3_info() в functions/info.c
вам необходимо добавить вашу новую директиву.
-
И наконец - вы, конечно, должны использовать новую вашу директиву где-нибудь.
Она будет адресоваться как php3_ini.directive.
|