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-templatesMDN (рус.)xsl:apply-templatesMSDN (en)