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