tree (дерево) | нет | нет | нет | нет |
Переменные
Несмотря на отсутствие побочных эффектов, которое является одним из основных принципов XSLT, в преобразованиях можно использовать переменные. Переменная определяется как имя, с которым связывается некоторое значение, например:
<xsl:variable name='url' select=''http://www.xsltdev.ru''/>
создаст переменную с именем url
и присвоит ей строковое значение 'http://www.xsltdev.ru'
. После этого переменную можно использовать в выражениях, например:
<xsl:value-of select='concat('Welcome to ', $url)'/>
Для того чтобы отличать переменные от путей выборки, в выражениях их именам предшествует префикс '$
': к значению переменной с именем url
мы обращались как к $url
.
Каждая из переменных имеет собственную
Помимо переменных, в преобразованиях и шаблонных правилах могут также определяться xsl:apply-templates
или xsl:call-template
, или самим процессором, если речь идет о глобальных параметрах.
Использование переменных и параметров в XSLT отличается от их использования в привычных процедурных языках программирования типа С++, Java или Object Pascal из-за того, что их значения не могут изменяться. После того, как переменной или параметру присвоено некоторое изначальное значение, оно будет оставаться неизменным.
Это ограничение оказывает значительное влияние на стиль программирования преобразований. В этом смысле XSLT намного ближе к функциональным языкам типа Lisp. Например, в XSLT часто используется рекурсия, которая является одним из основных принципов функционального программирования.
Выражения
Многие из задач, которые, так или иначе, выполняются во время преобразования, связаны с вычислением выражений. Для этих целей в XSLT используется язык XPath, который помимо выбора множеств узлов дерева может также выполнять некоторые основные операции над данными.
Несмотря на то, что XPath является самостоятельным языком, его роль в XSLT настолько велика, что здесь и далее мы будем рассматривать их как единое целое.
Можно выделить четыре основные задачи, для которых в преобразованиях используются выражения:
□ выбор узлов для обработки;
□ описание условий;
□ вычисление строковых значений, которые затем будут использованы в выходящем дереве;
□ вычисление множеств узлов, которые затем будут использованы в выходящем дереве.
Первая из задач непосредственно относится к самому процессу преобразования. Выражения, содержащиеся в атрибутах select
элементов xsl:apply-templates
и xsl:for-each
, вычисляют множества, к узлам которых нужно применить шаблоны.
<xsl:template match='HTML'>
<html>
<xsl:apply-templates select='HEAD'/>
<xsl:apply-templates select='BODY'/>
</html>
</xsl:template>
В этом шаблонном правиле содержатся два элемента xsl:apply-templates
, которые применяют шаблоны к множествам, выбранным выражениями HEAD
и BODY
соответственно.
Логические выражения XPath могут использоваться в качестве условий в таких элементах, как xsl:if
и xsl:when
, обеспечивая условную обработку.
Предположим, что нам нужно выводить различные сообщения в зависимости от возрастной информации, присутствующей во входящем документе:
<person>
<name>Johnny</name>
<age>19</age>
</person>
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='person'>
<xsl:if test='age >= 21'>
<xsl:text>Welcome, </xsl:text>
<xsl:value-of select='name'/>
<xsl:text>.</xsl:text>