 |
(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">. |  |