Constructing Nodes

This section covers the instructions used to construct new nodes: <xsl:document>, <xsl:result-document>, <xsl:element>, <xsl:attribute>, <xsl:namespace>, <xsl:comment>, <xsl:processing-instruction>, <xsl:text>, <xsl:sequence> and <xsl:number>. The example below builds a single output element containing an attribute, a namespace declaration, a comment, a processing instruction, a sequence of integers, and a formatted number.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="3.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:fn="http://www.w3.org/2005/xpath-functions">
   <xsl:template match="/">
      <xsl:text>&#10;</xsl:text>
      <xsl:document>
         <xsl:element name="a">
           <xsl:namespace name="ns"
                                    select="'http://example.com'"/>
           <xsl:attribute name="x" select="division/num2"/>
           <xsl:attribute name="y">10</xsl:attribute>
           <xsl:text>&#10;</xsl:text>
           <xsl:comment>COMMENT</xsl:comment>
           <xsl:processing-instruction name="pi"
                                                   select="'INSTRUCTION'"/>
           <xsl:text>&#10;</xsl:text>
           <xsl:sequence select="(1 to 5)"/>
           <xsl:text>&#10;</xsl:text>
           <xsl:number value="100000000"
                          grouping-separator="," grouping-size="3"/>
           <xsl:text>&#10;</xsl:text>
         </xsl:element>
      </xsl:document>
   </xsl:template>
</xsl:transform>

<xsl:attribute>, <xsl:namespace>, <xsl:comment>, <xsl:processing-instruction>, <xsl:sequence> and <xsl:number> can each carry a select attribute; when this attribute is absent, the value is instead given as content children.

<xsl:attribute> attributes: namespace ({uri}), separator ({string}), type (eqname), validation ("strict" | "lax" | "preserve" | "strip"), on-empty (expression).
<xsl:element> attributes: namespace ({uri}), inherit-namespaces ("yes" | "no"), use-attribute-sets (eqnames), type (eqname), validation ("strict" | "lax" | "preserve" | "strip"), on-empty (expression).
<xsl:number> attributes: select (expression), level ("single" | "multiple" | "any"), count (pattern), from (pattern), format ({string}), lang ({language}), letter-value ({"alphabetic" | "traditional"}), ordinal ({string}), start-at ({integer}).
To construct a document intended to form a final result rather than an intermediate result, use <xsl:result-document> instead of <xsl:document>. It can have the following attributes: format ({eqname}), href ({uri}), validation ("strict" | "lax" | "preserve" | "strip"), type (eqname), method ({"xml" | "html" | "xhtml" | "text" | eqname}), byte-order-mark, cdata-section-elements, doctype-public, doctype-system, encoding, escape-uri-attributes, html-version, include-content-type, indent, item-separator, media-type, normalization-form ({"NFC" | "NFD" | "NFKC" | "NFKD" | "fully-normalized" | "none" | nmtoken}), omit-xml-declaration, parameter-document, standalone ({"yes" | "no" | "omit"}), suppress-indentation, undeclare-prefixes, use-character-maps, output-version ({nmtoken}).