SAXONICA

Saxon Documentation
Full Contents
About Saxon
Changes in this Release
Conditions of Use
Using XSLT 2.0
Using XQuery
Handling Source Documents
XML Schema Processing
XPath API for Java
Saxon on .NET
Extensibility
Saxon Extensions
| Introduction
| EXSLT Extensions
» | Extension attributes (XSLT only)
| Additional serialization parameters
| Extension functions
| Extension instructions
Sample Saxon Applications
The Saxon SQL Extension
XSLT Elements
XPath 2.0 Expression Syntax
Function Library
Standards Conformance

# saxon:explain

This attribute may be set on any instruction in the stylesheet, including a literal result element, though the recommended use is to set it on an `xsl:template` or `xsl:function` declaration. The permitted values are "yes" and "no". If the value is "yes", then at compile time Saxon outputs (to the standard error output) a representation of the optimized expression tree for the template or function containing that instruction. The tree is represented by indentation. For example, consider this source code:

     <xsl:variable name="p" select="0"/>

     <xsl:template match="/" saxon:explain="yes" xmlns:saxon="http://saxon.sf.net/" exclude-result-prefixes="saxon">
       <a>
         <xsl:choose>
         <xsl:when test="$p != 0"><xsl:value-of select="1 div $p"/></xsl:when>
         <xsl:otherwise>12</xsl:otherwise>
         </xsl:choose>
       </a>
     </xsl:template>

This produces the output:

    Optimized expression tree for template at line 7 in (URI):
                        element
                          name a
                          content
                          value-of
                            "12"

This indicates that the template has been reduced to an instruction to create an element with name a, whose content is a single text node holding the string "12". This is because Saxon has established at compile time that it will always take the "otherwise" branch of the `xsl:choose` instruction. There is no `xsl:value-of` instruction in the source code, but the literal text node "12" is compiled to the same code as if the user had written `<xsl:value-of select="'12'"/>`

Next