Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

<b><xsl:value-of select="."/></b>

</xsl:template>

В этом правиле создается элемент

b
, в который включается текстовое значение текущего узла (то есть, обрабатываемого элемента
bold
). Применив это преобразование к входящему документу, мы получим следующий результат:

<b>text</b>

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

para
и создадим преобразование, включающее оба правила.

Листинг 5.2. Преобразование с para и bold — версия 1

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="bold">

<b><xsl: value-of select="."/></b>

 </xsl:template>

 <xsl:template match="para">

<xsl:value-of select="."/>

 </xsl:template>

</xsl:stylesheet>

На этот раз вместо ожидаемого результата вида

<b>text</b>
мы получим

 text

Попробуем ответить на три вопроса: кто виноват, что делать и куда делся элемент

b
.

Для ответа на вопрос, куда делся элемент

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

□ Процессор начинает обработку с корневого узла дерева. Он выбирает шаблон, соответствующий этому узлу. В нашем преобразовании такого шаблона нет, значит, процессор применит к корню шаблонное правило, определенное по умолчанию (см. раздел "Встроенные шаблоны" данной главы).

□ По умолчанию шаблонное правило корневого узла обрабатывает все дочерние узлы. В нашем документе единственным дочерним узлом корня будет элемент

para
.

□ Для элемента

para
в нашем преобразовании задан шаблон, который и будет применен к этому элементу.

□ В соответствии с этим шаблоном, процессор создаст элемент

p
и включит в него текстовое значение выражения "
.
". Как мы знаем, выражение "
.
" является сокращенной формой выражения "
self::node
", которое возвратит текущий узел. Таким образом, элемент
<xsl:value-of select="."/>
вычислит и возвратит строковое значение текущего узла, то есть узла
para
. Строковым значением элемента является конкатенация всех его текстовых потомков. Единственным текстовым потомком нашего para является текстовый узел со значением "
text
" и вот он-то и выводится между открывающим и закрывающим тегами созданного элемента
p
.

Таким образом, элемент

b
"потерялся" потому, что шаблон для
bold
просто не вызывался. Виноваты, естественно, мы сами, поскольку не включили его вызов. Осталось только разобраться, как можно вызвать шаблон для обработки элемента
bold
.

Ответ на этот вопрос предельно прост — для вызова неименованных шаблонных правил В XSLT используется элемент

xsl:apply-templates
.

Элемент xsl:apply-templates

Синтаксис этого элемента выглядит следующим образом:

<xsl:apply-templates

 select="выражение"

 mode="режим">

 <!-- Содержимое: несколько элементов xsl:sort или xsl:with-param -->

</xsl:apply-templates>

Элемент

xsl:apply-templates
применяет шаблонные правила к узлам, которые возвращаются выражением, указанным в атрибуте
select
. Если атрибут
select
опущен, то
xsl:apply-templates
применяет шаблонные правила ко всем дочерним узлам текущего узла, то есть

<xsl:apply-templates/>

равносильно

<xsl:apply-templates select="child::node"/>

Атрибут

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

Прежде чем двигаться дальше, опишем более подробно, что означает "применить шаблон" (англ. apply — применить, template — шаблон). Применение шаблонов — это составная часть обработки документа, которая может быть описана следующим порядком действий.

  • Читать дальше
  • 1
  • ...
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: