XSL Elements

The following elements are discussed on this page:

xsl:copy-of

Copies the sequence of nodes to the resultant sequence. Also known as “deep copy, ” when applied to a sequence, the node and all its descendants are copied. The select attribute is a required attribute. By default, xsl:copy-of will copy all the namespaces. 

<xsl:copy-of
  select = expression
  copy-namespaces? = "yes" | "no"
  type? = qname />

Example

<!-- Deep Copy Using XPath -->
     <xsl:copy-of select="//body"/>
<!-- Another Example Using XPath -->
<xsl:value-of select="/document/metadata/node()" />
<!-- Deep Copy Using Predefined Variable -->
     <xsl:copy-of select="$variable_name"/>

Attribute: select (mandatory): The sequence of values or nodes to be copied in the stylesheet.

Attribute: copy-namespace (optional): Indicates whether the namespace of an element should be copied. The default value is “yes.”

Attribute: validation (optional): Specifies whether the copied nodes should be subjected to schema validation, or whether existing type annotations should be retained or removed.

Attribute: type (optional): Identifies the type declaration against copied nodes.

xsl:value-of

Creates a text node for a given expression. If the resultant sequence contains a single value, this is converted to a string; otherwise it returns a zero-length string.

<xsl:value-of
   select = expression
   disable-output-escaping = "yes" | "no"/>

Example 

<!-- Single Value from an XPath -->
     <xsl:value-of select="/document/title/node()" />
<!-- Single value from a predefined variable -->
     <xsl:value-of select="$variable_name"/>

Attribute:select (optional): The sequence of values to be copied in the stylesheet.

Attribute:disable-output-escaping (optional): Indicates whether or not the special characters of the output should be XML escaped. The default value is “no.”

xsl:variable

Used to create a variable. If the variable is declared at the top level (immediately within xsl:stylesheet), it declares a global variable. Otherwise, it declares a local variable that can be visible only within the stylesheet element. The name attribute is required.

<xsl:variable
name="name"
select="expression"
as="sequence-type"

     <!-- Content: sequence-constructor -->
</xsl:variable>

Example

<!-- Variable without Type Definition -->
     <xsl:variable name="test1" select="document/content/p"/>
     <xsl:variable name="test2">
          <xsl:value-of select="document/content/p"/>
     </xsl:variable>
     <xsl:variable name="test3" select="'text'"/>
<!--  Variable with Type Definition   -->
     <xsl:variable name="test4" as="xs:string" select="document/content/p"/>
     <xsl:variable name="test5" as="xs:string">
          <xsl:value-of select="document/content/p"/>
     </xsl:variable>
     <xsl:variable name="test6" as="xs:string" select="'text'"/>

Attribute:name (mandatory): Defines the name of the variable.

Attribute:select (optional): The expression that is evaluated as the value of the variable. If omitted, the value is determined by the value of the sequence constructor of the xsl:variable element.

Attribute:as (optional): The return type of the variable. 

xsl:param

Used to create a parameter, which if declared at the top level defines it as global parameter. If the parameter is defined immediately within an xsl:template element, creates a localized parameter to a template. For an xsl:param to be created with a local scope, the following are required:

  • The xsl:param definition appears as an child element of xsl:template or xsl:function or xsl:iterate element; and,
  • Before any non-xsl:param children of that element.

The name attribute is required.

<xsl:param
name="name"
select="expression"
as="sequence-type"
required= "yes" | "no"

     <!-- Content: sequence-constructor -->
</xsl:param>

Example

<!-- Parameter without type definition -->
     <xsl:param name="test1" select="document/content/p"/>
     <xsl:param name="test2">
          <xsl:value-of select="document/content/p"/>
     </xsl:param>
     <xsl:param name="test3" select="'text'"/>
<!-- Parameter with type definition -->
     <xsl:param name="test4" as="xs:string" select="document/content/p"/>
     <xsl:param name="test5" as="xs:string">
          <xsl:value-of select="document/content/p"/>
     </xsl:param>
     <xsl:param name="test6" as="xs:string" select="'text'"/>

Attribute:name (mandatory): Defines the name of the parameter.

Attribute:select (optional): The expression that is evaluated as the value of the parameter. If omitted, the value is determined by the value of the sequence constructor of the xsl:param element.

Attribute:as (optional): The return type of the parameter.

Attribute:required (optional): Specifies whether the parameter is optional or mandatory.

Stylesheet Parameters

Stylesheet parameters are useful in creating global parameters that are accessible throughout the entire stylesheet declaration. A stylesheet parameter may be declared as mandatory, or may have a default value specified for use when no value is supplied.

Template Parameters

As a child of the template, xsl:param is used to define the parameter of the template, which may be supplied when the template is invoked.

Function Parameters

As a child of the function, xsl:param is used to define the parameter of the function, which will be supplied when the function is invoked. Functional parameters are mandatory when called within an XPath.

xsl:if

xsl:if is used for conditional processing. It takes a mandatory test attribute, with a Boolean expression.

<xsl:if
test="expression">
     <!-- Content: sequence-constructor -->
</xsl:if>

Example

<!-- Test if it is raining -->
<xsl:variable name="raining" select="'yes'"/>
<xsl:if test="$raining='yes'">
     Yes
</xsl:if>

Output

Yes

Attribute:test (mandatory): The Boolean condition to be tested.

xsl:when

xsl:when is always used as a child element of xsl:choose. It defines a condition to be tested and if the condition is true, the action to be performed. 

<xsl:choose>
<xsl:when
test="expression">
          <!-- Content: sequence-constructor -->
</xsl:when>
<xsl:choose>

Example 

<!-- Test if it is raining -->
<xsl:variable name="raining" select="'yes'"/>
     <xsl:choose>
          <xsl:when test="$raining='yes'">
               Yes
          </xsl:when>
          <xsl:when test="$raining='maybe'">
               May be
          </xsl:when>
</xsl:choose>

Output 

Yes

Attribute:test (mandatory): The Boolean condition to be tested.

xsl:otherwise

xsl:otherwise is always used as a child element of xsl:choose. It defines the action to be performed when none of the xsl:when conditions are satisfied. 

<xsl:choose>
<xsl:when
test="expression">
     <!-- Content: sequence-constructor -->
</xsl:when>
<xsl:otherwise>
     <!-- Content: sequence-constructor -->
</xsl:otherwise>
<xsl:choose>

Example 

<!-- Test if it is raining -->
<xsl:variable name="raining" select="'yes'"/>
     <xsl:choose>
          <xsl:when test="$raining='yes'">
               Yes
          </xsl:when>
          <xsl:when test="$raining='maybe'">
               May be
          </xsl:when>
          <xsl:when test="$raining='no'">
               No
          </xsl:when>
          <xsl:otherwise>
               Don&apos;t know
          </xsl:otherwise>    
</xsl:choose>

Output

Yes 

xsl:comment

The xsl:comment element is used to create a comment node. 

<xsl:comment
select="expression">
     <!-- Content: sequence-constructor -->
</xsl:comment>

Example

<xsl:comment select="/document/content/node()" /> 

Output 

<!-- Content of the content node -->

Example 

<xsl:comment select="'abc'" /> 

Output 

<!-- abc -->

Attribute:select (optional): The sequence of values or nodes to be commented.

xsl:import

Imports an external stylesheet with the required href attribute. The xsl:import element is always used at the top level of the stylesheet. When a stylesheet is imported into another stylesheet, the importing stylesheet has a higher precedence than the imported stylesheet.

<xsl:import href="URI"/>

Example 

<xsl:import href="commons.xsl" /> 

Attribute:href (mandatory): The URI of the stylesheet to be imported.

xsl:output

The xsl:output element is a top-level declaration used to control the output serialization of the resultant document.

<xsl:output
  method = "xml" | "html" | "xhtml" | "text"
  doctype-public = string
  doctype-system = string
  encoding = string
  indent = "yes" | "no"
  omit-xml-declaration = "yes" | "no"/>

Example 

<xsl:output method="xml"/>

Attribute:method (optional): Defines the required output format.

Attribute:doctype-public (optional): Indicates the public identifier to be used in the DOCTYPE declaration.

Attribute: doctype-system (optional): Indicates the system identifier to be used in the DOCTYPE declaration.

Attribute:encoding (optional): Defines the character encoding of output file.

Attribute:indent (optional): Indicates the source indentation of the output file.

Attribute:omit-xml-declaration (optional): Indicates whether an XML declaration should be included in the output file.

xsl:template

The xsl:template element defines the processing instruction for the source elements or nodes of a particular type. When the optional name attribute is present, the template may be invoked directly using xsl:call-template.

<xsl:template
name="name"
match="pattern">
<!-- Content:(<xsl:param>*,template) -->
</xsl:template>

Example

<!-- XSL Template with Match -->
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "http://commons.omniupdate.com/dtd/standard.dtd">
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ou="http://omniupdate.com/XSL/Variables">
     <!--  Main Template -->
     <xsl:template match="/">
          <!-- Template Content -->
     </xsl:template>
</xsl:stylesheet> 
     <!-- XSL Template with Name -->
     <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "http://commons.omniupdate.com/dtd/standard.dtd">
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ou="http://omniupdate.com/XSL/Variables">
     <!--  Main Template -->
     <xsl:template match="/">
          <xsl:call-template name="test_template" />
     </xsl:template>
     <xsl:template name="test_template">
          <!-- Template Content -->
     </xsl:template>
</xsl:stylesheet>

Attribute:name (optional): It is an optional attribute that specifies a name for the template. If this attribute is omitted, there must be a match attribute.

Attribute: match (optional): It is an optional attribute that contains the match pattern for the template. If this attribute is omitted, there must be a name attribute.

xsl:call-template

The xsl:call-template element is used to invoke a named template. The name attribute is required.

<xsl:call-template name="template_name"/>

Example

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "http://commons.omniupdate.com/dtd/standard.dtd">
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ou="http://omniupdate.com/XSL/Variables">
     <!-- Main Template -->
     <xsl:template match="/">
          <xsl:call-template name="test_template" />
     </xsl:template>
     <xsl:template name="test_template">
      <!-- Template Content -->
     </xsl:template>
</xsl:stylesheet>

Attribute: name (mandatory):  The name of the template to be called.

xsl:apply-templates

The xsl:apply-templates element defines the set of nodes to be processed.

<xsl:apply-templates
    select = expression
    mode = token>
    <!-- Content: (xsl:sort | xsl:with-param)* -->
</xsl:apply-templates>

Example

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM     "http://commons.omniupdate.com/dtd/standard.dtd">
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ou="http://omniupdate.com/XSL/Variables">
     <!--  Main Template -->
     <xsl:template match="/">
          <xsl:apply-templates select="document/content" />
     </xsl:template>
     <xsl:template match="table">
          <!-- Template Content -->
     </xsl:template>
</xsl:stylesheet>

Attribute: select (optional): Defines the sequence of nodes to be processed.

Attribute:mode (optional): Defines the processing mode. The default is an unnamed mode, however when a mode is defined, selected nodes must have the same mode. 

xsl:stylesheet

Used to define the root element of the stylesheet. It is the outermost element of a stylesheet. The xsl:stylesheet should contain at least one namespace declaration; xmlns:xsl="http://www.w3.org/1999/XSL/Transform" is typically defined as it allows the document to be identified as an XSLT stylesheet.

<xsl:stylesheet
version="version"
exclude-result-prefixes=tokens >
<!-- Content:(<xsl:import>*,top-level-elements) -->
</xsl:stylesheet>

Example

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM
"http://commons.omniupdate.com/dtd/standard.dtd">
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ou=http://omniupdate.com/XSL/Variables
exclude-result-prefixes="ou">
     <!--  Main Template -->
     <xsl:template match="/">
          <!-- Template Content -->
     </xsl:template>
</xsl:stylesheet>

Attribute:version (mandatory): Defines the XSLT version required by the stylesheet.

Attribute:xmlns:[namespace] (mandatory): Defines the XSLT namespace declaration used in the stylesheet.

Attribute:exclude-result-prefixes (optional): Indicates any namespaces used in the stylesheet that should not be copied to the output destination.

xsl:copy

Used to create an attribute node and adds it to the resultant sequence. The <xsl:copy> element copies the context node to the resultant sequence. It is also referred to as “shallow copy,” which means that it does not copy the children, descendants, or attributes of the context node, only the context node itself with its namespaces (if it is an element).

<xsl:copy
  copy-namespaces? = "yes" | "no"
  type? = qname>
  <!-- Content: sequence-constructor -->
</xsl:copy>

Example

<xsl:template match=" table | thead | tbody | tr | th | td ">
   <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
   </xsl:copy>
</xsl:template>

Attribute:copy-namespace (optional): Indicates whether the namespace of an element should be copied. The default value is “yes.”

Attribute:type (optional): Identifies the type declaration against copied nodes.

xsl:text

Used to output literal text to the resultant sequence.

<xsl:text
disable-output-escaping="yes|no"

  <!-- Content: Character data -->
</xsl:text>

Example

<xsl:text disable-output-escaping="yes">
     &lt;div&gt; test &lt;/div&gt;
</xsl:text>

Output

<div>test</div>

Attribute:name (mandatory): Defines the name of the function.

Attribute:disable-output-escaping (optional): Defines whether the output should be returned as is (“yes”) or XML escaped (“no”). The default is “no.”

xsl:element

Constructs an element node.

<xsl:element
  name = qname>
  <!-- Content: (sequence-constructor) -->
</xsl:element>

Example

<xsl:element name="test">
    <xsl:text>This is a test document</xsl:text>
</xsl:element>

Output

<test>This is a test document</test>

Attribute:name (mandatory): Defines the name of the element. 

xsl:for-each

The xsl:for-each element selects a sequence of items using an XPath expression and performs the same processing for each item in the sequence.

<xsl:for-each
select="sequence-expression"

     <!-- Content: sequence-constructor -->
</xsl:for-each>

Example

     <!-- Get all table body content -->
          <xsl:for-each select="//tbody/tr">
               <xsl:copy-of select="current()"/>
          <xsl:for-each>

Attribute:select (mandatory): Expression returning a sequence of nodes/values that needs to be processed.

 

Introduction to XSLIntroduction to XPath