<!-- review: finished -->

<a id="http-xslt"></a>

# XSLT

Фильтр, преобразующий XML-ответ с помощью одного или нескольких XSLT-шаблонов.

При [сборке из исходного кода](https://angie.software//angie/docs/installation/sourcebuild.md#sourcebuild) модуль не собирается по умолчанию; его необходимо
включить с помощью [параметра сборки](https://angie.software//angie/docs/installation/sourcebuild.md#configure)
`‑‑with‑http_xslt_module`.

В наших репозиториях модуль собран [динамически](https://angie.software//angie/docs/installation/index.md#install-dynamicmodules) и
доступен отдельным пакетом `angie-module-xslt` или `angie-pro-module-xslt`.

#### NOTE
Для этого модуля нужны библиотеки [libxml2](http://xmlsoft.org/) и [libxslt](http://xmlsoft.org/XSLT/).

<a id="configuration-example-51"></a>

## Пример конфигурации

```nginx
location / {
    xml_entities    /site/dtd/entities.dtd;
    xslt_stylesheet /site/xslt/one.xslt param=value;
    xslt_stylesheet /site/xslt/two.xslt;
}
```

<a id="directives-54"></a>

## Директивы

<a id="index-0"></a>

<a id="xml-entities"></a>

### xml_entities

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xml_entities` путь;   |
|------------------------------------------------------------------------------------------|------------------------|
| По умолчанию                                                                             | —                      |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location |

Задает файл DTD, в котором описаны символьные сущности. Этот файл компилируется на стадии конфигурации. По техническим причинам модуль не имеет возможности использовать внешнее подмножество, заданное в обрабатываемом XML, поэтому оно игнорируется, а вместо него используется специально заданный файл. В этом файле не нужно описывать структуру XML, достаточно только объявления необходимых символьных сущностей, например:

```xml
<!ENTITY nbsp "&#xa0;">
```

<a id="index-1"></a>

<a id="xslt-last-modified"></a>

### xslt_last_modified

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xslt_last_modified` `on` | `off`;   |
|------------------------------------------------------------------------------------------|--------------------------------------|
| По умолчанию                                                                             | `xslt_last_modified off;`            |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location               |

Позволяет сохранить поле заголовка `Last-Modified` исходного ответа во время XSLT-преобразований для лучшего кэширования ответов.

По умолчанию поле заголовка удаляется, так как содержимое ответа изменяется во время преобразования и может содержать динамически созданные элементы или части, которые изменились независимо от исходного ответа.

<a id="index-2"></a>

<a id="xslt-param"></a>

### xslt_param

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xslt_param` параметр значение;   |
|------------------------------------------------------------------------------------------|-----------------------------------|
| По умолчанию                                                                             | —                                 |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location            |

Задает параметры для XSLT-шаблонов. Значение рассматривается как выражение XPath. В значении можно использовать переменные. Если нужно передать в шаблон строковое значение, можно воспользоваться директивой [xslt_string_param](#xslt-string-param).

Директив `xslt_param` может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы `xslt_param` и [xslt_string_param](#xslt-string-param).

<a id="index-3"></a>

<a id="xslt-string-param"></a>

### xslt_string_param

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xslt_string_param` параметр значение;   |
|------------------------------------------------------------------------------------------|------------------------------------------|
| По умолчанию                                                                             | —                                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                   |

Задает строковые параметры для XSLT-шаблонов. Выражения XPath в значении параметра не интерпретируются. В значении можно использовать переменные.

Директив `xslt_string_param` может быть несколько. Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы [xslt_param](#xslt-param) и `xslt_string_param`.

<a id="index-4"></a>

<a id="xslt-stylesheet"></a>

### xslt_stylesheet

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xslt_stylesheet` шаблон [параметр=значение ...];   |
|------------------------------------------------------------------------------------------|-----------------------------------------------------|
| По умолчанию                                                                             | —                                                   |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | location                                            |

Задает XSLT-шаблон и необязательные параметры для этого шаблона. Шаблон компилируется на стадии конфигурации.

Параметры можно задавать как по отдельности, так и группировать в одной строке, разделяя символом ":". Если же в самих параметрах встречается символ ":", то его нужно экранировать в виде "%3A". Кроме того, libxslt требует, чтобы параметры, содержащие не только алфавитно-цифровые символы, были заключены в одинарные или двойные кавычки, например:

```console
param1='http%3A//www.example.com':param2=value2
```

В описании параметров можно использовать переменные, например, целая строка параметров может быть взята из одной переменной:

```nginx
location / {
    xslt_stylesheet /site/xslt/one.xslt
                    $arg_xslt_params
                    param1='$value1':param2=value2
                    param3=value3;
}
```

Можно указать несколько шаблонов — в этом случае они будут применяться последовательно в порядке их описания.

<a id="index-5"></a>

<a id="xslt-types"></a>

### xslt_types

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `xslt_types` mime-тип ...;   |
|------------------------------------------------------------------------------------------|------------------------------|
| По умолчанию                                                                             | `xslt_types text/xml;`       |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location       |

Разрешает преобразования в ответах с указанными MIME-типами в дополнение к `text/xml`. Специальное значение `*` соответствует любому MIME-типу. Если в результате преобразования выдается HTML-ответ, то его MIME-тип меняется на `text/html`.
