(PHP 4 >= 4.0.3)
xslt_process — Запуск XSLT преобразования
$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> Мой набор узлов : <foo>bar</foo>
Замечание:
Учтите, что в случае использования Windows, вам нужно указать file:// в начале пути.