Модуль ngx_http_xslt_module
| Пример конфигурации Директивы xml_entities xml_external_entities xslt_last_modified xslt_param xslt_string_param xslt_stylesheet xslt_types |
Модуль ngx_http_xslt_module (0.7.8+) — это фильтр,
преобразующий XML-ответ с помощью одного или нескольких XSLT-шаблонов.
По умолчанию этот модуль не собирается, его сборку необходимо
разрешить с помощью конфигурационного параметра
--with-http_xslt_module.
Для сборки и работы этого модуля нужны библиотеки libxml2 и libxslt.
Пример конфигурации
location / {
xml_entities /site/dtd/entities.dtd;
xslt_stylesheet /site/xslt/one.xslt param=value;
xslt_stylesheet /site/xslt/two.xslt;
}
Директивы
| Синтаксис: |
xml_entities |
|---|---|
| Умолчание: | — |
| Контекст: |
http, server, location |
Задаёт файл DTD, в котором описаны символьные сущности. Этот файл компилируется на стадии конфигурации. По техническим причинам модуль не имеет возможности использовать внешнее подмножество, заданное в обрабатываемом XML, поэтому оно игнорируется, а вместо него используется специально заданный файл. В этом файле не нужно описывать структуру XML, достаточно только объявления необходимых символьных сущностей, например:
<!ENTITY nbsp " ">
| Синтаксис: |
xml_external_entities |
|---|---|
| Умолчание: |
xml_external_entities off; |
| Контекст: |
http, server, location |
Эта директива появилась в версии 1.31.3.
Разрешает или запрещает загрузку внешних сущностей, объявленных во внутреннем подмножестве DTD обрабатываемого XML. Поддерживается только загрузка внешних сущностей из файлов.
Чтобы предотвратить чтение произвольных локальных файлов, доступных рабочему процессу, рекомендуется разрешать загрузку внешних сущностей только в том случае, если обрабатываемый XML получен из доверенного источника.
| Синтаксис: |
xslt_last_modified |
|---|---|
| Умолчание: |
xslt_last_modified off; |
| Контекст: |
http, server, location |
Эта директива появилась в версии 1.5.1.
Позволяет сохранить поле заголовка “Last-Modified” исходного ответа во время XSLT-преобразований для лучшего кэширования ответов.
По умолчанию поле заголовка удаляется, так как содержимое ответа изменяется во время преобразования и может содержать динамически созданные элементы или части, которые изменились независимо от исходного ответа.
| Синтаксис: |
xslt_param |
|---|---|
| Умолчание: | — |
| Контекст: |
http, server, location |
Эта директива появилась в версии 1.1.18.
Задаёт параметры для XSLT-шаблонов. Значение рассматривается как выражение XPath. В значении можно использовать переменные. Если нужно передать в шаблон строковое значение, можно воспользоваться директивой xslt_string_param.
Директив xslt_param может быть несколько.
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы xslt_param
и xslt_string_param.
| Синтаксис: |
xslt_string_param |
|---|---|
| Умолчание: | — |
| Контекст: |
http, server, location |
Эта директива появилась в версии 1.1.18.
Задаёт строковые параметры для XSLT-шаблонов. Выражения XPath в значении параметра не интерпретируются. В значении можно использовать переменные.
Директив xslt_string_param может быть несколько.
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы xslt_param
и xslt_string_param.
| Синтаксис: |
xslt_stylesheet
|
|---|---|
| Умолчание: | — |
| Контекст: |
location |
Задаёт XSLT-шаблон и необязательные параметры для этого шаблона. Шаблон компилируется на стадии конфигурации.
Параметры можно задавать как по отдельности, так и группировать
в одной строке, разделяя символом “:”.
Если же в самих параметрах встречается символ “:”,
то его нужно экранировать в виде “%3A”.
Кроме того, libxslt требует,
чтобы параметры, содержащие не только алфавитно-цифровые символы,
были заключены в одинарные или двойные кавычки, например:
param1='http%3A//www.example.com':param2=value2
В описании параметров можно использовать переменные, например, целая строка параметров может быть взята из одной переменной:
location / {
xslt_stylesheet /site/xslt/one.xslt
$arg_xslt_params
param1='$value1':param2=value2
param3=value3;
}
Можно указать несколько шаблонов — в этом случае они будут применяться последовательно в порядке их описания.
| Синтаксис: |
xslt_types |
|---|---|
| Умолчание: |
xslt_types text/xml; |
| Контекст: |
http, server, location |
Разрешает преобразования в ответах с указанными MIME-типами
в дополнение к “text/xml”.
Специальное значение “*” соответствует любому MIME-типу
(0.8.29).
Если в результате преобразования выдаётся HTML-ответ, то его MIME-тип
меняется на “text/html”.