xsl:on-non-empty

Used to allow conditional content construction to be made streamable. Outputs the enclosed content only if the containing sequence generates no "ordinary" content.

Category: instruction
Content: sequence-constructor
Permitted parent elements: any XSLT element whose content model is sequence-constructor; any literal result element

Attributes

select?

expression

Notes on the Saxon implementation

New in XSLT 3.0, and implemented since Saxon 9.7.

Examples

The following code generates a header and footer only if there is content, however it is not guaranteed-streamable because it processes child item-for-sale elements more than once:

<xsl:if test="exists(item-for-sale)"> <h1>Items for Sale</h1> </xsl:if> <xsl:apply-templates select="item-for-sale"/> <xsl:if test="exists(item-for-sale)"> <p>Total value: {accumulator-before('total-value')}</p> </xsl:if>

To make this streamable, it can be rewritten using the xsl:on-non-empty instruction:

<xsl:sequence> <xsl:on-non-empty> <h1>Items for Sale</h1> </xsl:on-non-empty> <xsl:apply-templates select="item-for-sale"/> <xsl:on-non-empty> <p>Total value: {accumulator-before('total-value')}</p> </xsl:on-non-empty> </xsl:sequence>

Links to W3C specifications

XSLT 3.0 Specification

See also

xsl:on-empty

xsl:where-populated