Переменные в XSLT отличается от переменных в обычных языках программирования из-за того, что их значения не могут изменяться. После того как переменной присвоено какое-то значение, оно остается постоянным.
(Странно, почему перменные названы переменными, а не константами. Прим.ред.)
Определяются переменные просто:
<!-- variables.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<!-- definition of the variable --> <xsl:variable name="path">http://somedomain/tmp/xslt</xsl:variable>
<html> <head> <title>Пример с переменными</title> </head>
<body> <p> <a href="{$path}/photo.jpg">Фотография моего последнего путешествия</a> </p> </body> </html> </xsl:template>
</xsl:stylesheet>
Результирующий HTML-документ:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Пример с переменными</title> </head> <body> <p><a href="http://somedomain/xslt/photo.jpg">Фотография моего последнего путешествия</a></p> </body> </html>
Переменной можно присвоить значение узла или значение атрибута узла:
<!-- variables_select.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"> <html> <head> <title>Пример с переменными</title> </head> <body> <xsl:apply-templates select="//photo"/> </body> </html> </xsl:template>
<xsl:template match="photo"> <!-- определение переменных --> <xsl:variable name="path">http://somedomain/tmp/xslt</xsl:variable> <xsl:variable name="photo" select="file"/> <p> <a href="{$path}/{$photo}"><xsl:value-of select="description"/></a> </p> </xsl:template>