xsl:apply-templates¶
Элемент xsl:apply-templates
применяет шаблонные правила к узлам, которые возвращаются выражением, указанным в атрибуте select
.
Если атрибут select
опущен, то xsl:apply-templates
применяет шаблонные правила ко всем дочерним узлам текущего узла.
Синтаксис¶
1 2 3 |
|
Атрибуты:
select
- необязательный атрибут, выражение вычисляет набор узлов к которым применяются преобразования. Если атрибут не задан — преобразования применяются ко всем потомкам текущего узла, включая текстовые.
mode
- необязательный атрибут, указывает имя режима преобразования.
Описание и примеры¶
Пример 1¶
В примере 1 для элемента chapter
создается блок, а затем обрабатывается его непосредственный потомок:
1 2 3 4 5 |
|
Пример 2¶
В примере 2 обрабатываются все содержащиеся в author
элементы given-name
, которые являются непосредственным потомком author-group
:
1 2 3 4 5 |
|
Пример 3¶
В примере 3 обрабатываются все элементы heading
, являющиеся потомками элемента book
:
1 2 3 4 5 |
|
Пример 4¶
Есть также возможность обрабатывать элементы, которые не являются потомками текущего узла. В примере 4 предполагается, что элемент department
имеет непосредственный потомок group
и потомки employee
. Сперва находится отдел employee
, а затем обрабатывается непосредственный потомок group
элемента department
:
1 2 3 4 5 6 7 8 9 10 |
|
Пример 5¶
Для выполнения простого переупорядочения в пределах одного шаблона можно использовать сразу несколько элементов xsl:apply-templates
. В примере 5 создаются две таблицы HTML. Первая таблица заполняется отечественными продажами, вторая — международными:
1 2 3 4 5 6 7 8 |
|
В XSLT 2.0 у атрибута mode
при использовании с элементом <xsl:apply-templates>
появились два специальных значения:
#default
– соответствует режиму по умолчанию;#current
– соответствует текущему режиму.
В XSLT 2.0 возможности атрибута mode были расширены. В следующей таблице стилей используются значения #default
, #current
и #all
атрибута mode
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
В XSLT 2.0 атрибут mode элемента <xsl:apply-templates>
может принимать новые значения #current
и #default
. У атрибута mode
элемента <xsl:template>
определены новые значения #all
и #default
. В нашей таблице стилей используются все три новых значения:
- В шаблоне
match="/"
элемент<xsl:apply-templates>
используется со значениями#default
,blue
иred
. Три элемента<xsl:apply-template>
отличаются только одним – значением атрибутаmode
. - Первый шаблон
match="manufacturer"
не имеет атрибутаmode
, поэтому он применяется в режиме по умолчанию. При использовании<xsl:apply-templates mode="#default" ...>
будет активизирован именно этот шаблон. - У второго шаблона
match="manufacturer"
атрибутmode
равенblue red
. Этот шаблон активизируется при выборе режимаblue
илиred
. - Оба шаблона
match="manufacturer"
используют запись<xsl:apply-templates mode="#current" ...>
для обработки элементов<car>
. Фактически текущее значение mode передается процессору XSLT в виде параметра, сообщая ему, какой шаблон следует применять. - Первый шаблон
match="car"
определяется с атрибутомmode="#all"
, поэтому он является шаблоном по умолчанию, который активизируется обоими элементами<xsl:apply-templates mode="#current" ...>
. - Последний шаблон
match="car"
определяется с атрибутомmode="red"
. Чтобы ему отдавалось предпочтение перед шаблономmode="#all"
, мы добавляем атрибутpriority="1"
. Без него процессор Saxon выводит предупреждение о неоднозначном применении правил, хотя и активизирует шаблонmode="red"
при действующем режимеred
. Ядро Altova XML никаких предупреждений не выдает – оно просто активизирует шаблон сmode="red"
.
Начиная с шаблона match="/"
, наша таблица стилей генерирует выходной документ вызовами разных шаблонов с тремя режимами mode
. Три режима форматируют одну и ту же информацию тремя разными способами. В итоге таблица стилей создает тот же документ HTML, что и предыдущая таблица стилей.
Пример 6¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
См. также¶
xsl:call-template
— вызывает шаблон по имени.xsl:sort
— позволяет сортировать множество узлов.xsl:with-param
— связывает с именем параметра значение.xsl:template
— определяет шаблон.
Ссылки¶
xsl:apply-templates
MDN (рус.)xsl:apply-templates
MSDN (en)