"for ... in ... return" instruction is useful in many scenarios as it is very flexible although a bit more difficult to use.
When reading this instruction, the first attention should be given to the expression which follows the word "in". This expression specifies the sequence to be used in further processing.
Name of variables are preceded by dollar sign ($) in XSLT. The variable given after the word "for" specifies the name of variable to be used in further processing. In time of processing are all values from the sequence generated after "in" are one by one assigned to this variable which is then used in instructions following the word "return".
The instructions after "return" perform some processing on the sequence specified after "in" word. It means that final sequence will have same number of items as the "in" one.
The function concat() in the second example joins its arguments to a single string, which is outputed.
In the third example items of sequence are nodes. Therefore it is possible to ask about value of an attribute on this node and use it in the calculation, where the attribute is multiplied by the value of the element.
|
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <xsl:template match="/aaa"> <xxx> <xsl:value-of select="for $a in (1 to 5) return $a * $a"/> </xxx> <yyy> <xsl:value-of select="for $a in reverse(('a','b','c')) return concat('x-',$a,'-y')"/> </yyy> <zzz> <xsl:value-of select="for $a in bbb return $a * $a/@c"/> </zzz> </xsl:template> </xsl:stylesheet> |
|
|
XML
<aaa> <bbb c="2">3</bbb> <bbb c="5">8</bbb> <bbb c="7">1</bbb> </aaa> |
Output
<xxx>1 4 9 16 25</xxx> <yyy>x-c-y x-b-y x-a-y</yyy> <zzz>6 40 7</zzz> |
| Previous chapter: | Templates - basic usage |
| Next chapter: | Sequence Combinations |
| Previous page: | Function reverse |
| Next page: | Several variables can be used is for ... in ... return instruction |