ГлавнаяОтзывы и пожеланияСтатьи
Функции по алфавиту:    a     b     c     d     e     f     g     h     i     j     k     l     m     n     o     p     q     r     s     t     u     v     w     x     y     z  

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


EXPERTGS.ru описание функций php.