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
<br>
";
print "<pre>
";
readfile(’result.xml’);
print "</pre>
";
}
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
<br>
";
print "<pre>
";
print $result;
print "</pre>
";
}
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
<br>
";
print "<pre>
";
print $result;
print "</pre>
";
}
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">.