xsl:sequence
Used to construct arbitrary sequences. It may select any sequence of nodes and/or atomic items, and essentially adds these to the result sequence.
Category: instruction
Content: sequence-constructor
Permitted parent elements:
any XSLT element whose content model is
sequence-constructor; any literal result element
Attributes
|
| Specifies the input. Mandatory attribute in
XSLT 2.0, but in XSLT 3.0 (and implemented since Saxon 9.5) the input may be
specified either by a |
|
| New in XSLT 4.0. Defines the required type of the
result sequence. Defaults to |
Saxon availability
Available in XSLT 2.0 and later versions. Available in all Saxon editions. Available for all platforms.
Notes on the Saxon implementation
The XSLT 4.0 attribute as is implemented since Saxon
13.
Details
The xsl:sequence element may be used to produce any sequence of
nodes and/or atomic items. These are included in the result sequence directly.
Unlike xsl:copy-of, no copy is
made.
The most common use is to return a result from a function (see Example 1).
There are two other interesting usage scenarios. The first is copying atomic
values into a tree (see Example 2). The second, more important, is constructing
a sequence-valued variable (see Example 3). A variable is sequence-valued if the
variable binding element (e.g. xsl:variable) has non-empty content, an as attribute, and
no select attribute.
If nodes are constructed within a sequence-valued variable, they will be parentless. See Example 4 for an example of a sequence-valued variable containing parentless nodes.
Examples
Example 1
Returning a result from a function:
<xsl:function name="f:increment" as="xs:integer"> <xsl:param name="in" as="xs:integer"/> <xsl:sequence select="$in + 1"/> </xsl:function>Example 2
Copying atomic items into a tree:
<e> <xsl:sequence select="1 to 5"/> <br/> <xsl:sequence select="6 to 10"/> </e>This produces the output <e>1 2 3 4 5<br/>6 7 8 9
10</e>.
Example 3
Constructing a sequence-valued variable:
<xsl:variable name="seq" as="xs:integer *"> <xsl:for-each select="1 to 5"> <xsl:sequence select=". * ."/> </xsl:for-each> </xsl:variable>This produces the sequence (1, 4, 9, 16, 25) as the value of the
variable.
Example 4
Creating a variable whose value is a sequence of three parentless attributes:
<xsl:variable name="seq" as="attribute() *"> <xsl:attribute name="a">10</xsl:attribute> <xsl:attribute name="b">20</xsl:attribute> <xsl:attribute name="a">30</xsl:attribute> </xsl:variable>It is quite legitimate to have two attributes in the sequence with the same
name; there is no conflict until an attempt is made to add them both to the
same element. The attributes can be added to an element by using
<xsl:copy-of select="$seq"/> within an xsl:element instruction or
within a literal result element. At
this stage the usual rule applies: if there are duplicate attributes, the
last one wins.