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
<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">.
| | Другие функции на x:
xmlrpc_decode xmlrpc_decode_request xmlrpc_encode_request xmlrpc_get_type xmlrpc_parse_method_descriptions xmlrpc_server_create xmlrpc_server_register_introspection_callback xmlrpc_set_type xml_get_current_byte_index xml_get_current_line_number xml_get_error_code xml_parse xml_parser_create xml_parser_create_ns xml_parser_free xml_parser_get_option xml_parser_set_option xml_set_default_handler xml_set_end_namespace_decl_handler xml_set_notation_decl_handler xml_set_object xml_set_start_namespace_decl_handler xpath_eval xslt_errno xslt_error xslt_free xslt_set_error_handler xslt_set_sax_handler xslt_set_sax_handlers
|