xslt_process

(PHP 4 >= 4.0.3)

xslt_process Запуск XSLT преобразования

Описание

mixed xslt_process ( resource $xh , string $xmlcontainer , string $xslcontainer [, string $resultcontainer [, array $arguments [, array $parameters ]]] )

xslt_process() - главная функция расширения XSLT. Она позволяет применить XSLT преобразование практически к любому типу входных данных - контейнеров. Это возможно, благодаря использованию буферов аргументов - концепция, взятая из Sablotron XSLT процессора (на данный момент это расширение поддерживает только XSLT процессор). По умолчанию, контейнеры - файлы содержащие документ для преобразования.

Список параметров

xh

Ресурс XSLT-процессора, возвращаемый функцией xslt_create().

xmlcontainer

Путь к XML файлу или псевдопеременная для XML аргумента.

xslcontainer

Путь к XSL файлу или псевдопеременная для XML аргумента.

resultcontainer

Контейнер для результата. По умолчанию, это имя файла для записи преобразованного документа. Если не задано - то есть NULL - то результат будет возвращен из функции.

arguments

Вместо явного указания аргументов XML и XSLT в функции xslt_process() можно задать "псевдопеременные", которые будут заменяться значениями из отдельного массива аргументов arguments.

parameters

Массив параметров, которые будут передаваться в XSLT-документ. Доступ к этим параметрам из XSL файлов можно получить, используя инструкцию <xsl:param name="имя_параметра">. Параметры должны быть закодированы в UTF-8, а их значения будут интерпретированы Sablotron процессором, как символьные строки. Другими словами, нельзя передавать узлы и поддеревья в качестве параметров в XSLT документ.

Контейнеры также могут быть заданы в виде массива arguments (см. ниже).

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Если контейнер для результата не задан - т.е. NULL - будет возвращен результат преобразования.

Список изменений

Версия Описание
4.0.6 Эта функция больше не принимает XML строки в качестве значений xmlcontainer или xslcontainer. Передача строк с XML данными в качестве какого-либо из этих параметров приведет к ошибке распределения памяти в версиях Sablotron ранее 0.95 включительно.

Примеры

Простейший тип преобразования с помощью функции 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')) {
    echo 
"УСПЕХ, sample.xml преобразован в соответствии с sample.xsl в result.xml";
    echo 
", содержимое result.xml:\n<br />\n";
    echo 
"<pre>\n";
    
readfile('result.xml');
    echo 
"</pre>\n";
} else {
    echo 
"К сожалению, sample.xml не может быть преобразован в соответсвии с sample.xsl в";
    echo 
"  result.xml по следующей причине: " xslt_error($xh) . ", код ошибки: ";
    echo 
xslt_errno($xh);
}

xslt_free($xh);

?>

Зачастую, особенно это относится к web окружению, требуется прямой вывод результата преобразования. Этого можно добиться, если опустить третий аргумент функции xslt_process() (или передать в качестве него NULL). В этом случае функция вернет результат XSLT преобразования без помещения его в файл...

Пример #2 Использование функции xslt_process() для преобразования XML и XSL файлов в переменную, содержащую результирующие XML данные

<?php

// Создание нового XSLT processor
$xh xslt_create();

// Преобразование документа, возврат результата в переменную $result
$result xslt_process($xh'sample.xml''sample.xsl');
if (
$result) {
    echo 
" УСПЕХ, sample.xml преобразован в соответствии с sample.xsl в переменную \$result";
    echo 
", содержимое переменной \$result следующее:\n<br />\n";
    echo 
"<pre>\n";
    echo 
$result;
    echo 
"</pre>\n";
} else {
    echo 
" К сожалению, sample.xml не может быть преобразован в соответсвии с sample.xsl в";
    echo 
" переменную \$result по следующей причине: " xslt_error($xh);
    echo 
". Код ошибки: " xslt_errno($xh);
}

xslt_free($xh);

?>

Приведенные выше ситуации и примеры являются наиболее общими и используются чаще всего. Однако, в ряде случаев XML и XSLT может быть получен из внешних источников, таких как база данных или сокет. В этих случаях XML и/или XSLT данные хранятся в переменных, а помещение их в файлы создаст дополнительные временные затраты, что для некоторых приложений критично. В этих исключительных ситуациях на помощь придет особый синтаксис "аргументов" 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) {
    echo 
" УСПЕХ, sample.xml преобразован в соответствии с sample.xsl в переменную \$result";
    echo 
", содержимое переменной \$result следующее:\n<br />\n";
    echo 
"<pre>\n";
    echo 
$result;
    echo 
"</pre>\n";
} else {
    echo 
" К сожалению, sample.xml не может быть преобразован в соответсвии с sample.xsl в";
    echo 
" переменную \$result по следующей причине: " xslt_error($xh);
    echo 
". Код ошибки: " xslt_errno($xh);
}
xslt_free($xh);
?>

Пример #4 Передача PHP переменных в XSL файлы

<?php

// XML строка
$xml '<?xml version="1.0"?>
<para>
 change me
</para>'
;

// XSL строка
$xsl '
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no"
 omit-xml-declaration="yes"  media-type="text/html"/>
 <xsl:param name="myvar"/>
 <xsl:param name="mynode"/>
 <xsl:template match="/">
Моя PHP переменная : <xsl:value-of select="$myvar"/><br />
Мой набор узлов : <xsl:value-of select="$mynode"/>
 </xsl:template>
</xsl:stylesheet>'
;


$xh xslt_create();

// второй параметр будет интерпретирован как строка
$parameters = array (
  
'myvar' => 'test',
  
'mynode' => '<foo>bar</foo>'
);

$arguments = array (
  
'/_xml' => $xml,
  
'/_xsl' => $xsl
);

echo 
xslt_process($xh'arg:/_xml''arg:/_xsl'NULL$arguments$parameters);

?>

Результат выполнения данного примера:

Моя PHP переменная : test<br>
Мой набор узлов : &lt;foo&gt;bar&lt;/foo&gt;

Примечания

Замечание:

Учтите, что в случае использования Windows, вам нужно указать file:// в начале пути.


Участник рейтинга Тэглайн 2010