Skip to content

XSLT <xsl:element>

How to dynamically create XML elements in XSLT transformations using the <xsl:element> instruction, including syntax, attributes (name, namespace, use-attribute-sets), and practical examples for generating custom output nodes.

XSLT <xsl:element>

The <xsl:element> element is used to create an element node in the output document.

Syntax


<xsl:element
        name="name"
        namespace="URI"
        use-attribute-sets="namelist">

    <!-- Content:template -->

</xsl:element>

Attributes

Attribute Value Required/Optional Description
name name Required Specifies the name of the element to be created (the value of the name attribute can be set to an expression that is computed at run-time, like this: <xsl:element name="{$country}" />
namespace URI Optional Specifies the namespace URI of the element (the value of the namespace attribute can be set to an expression that is computed at run-time, like this: <xsl:element name="{$country}" namespace="{$someuri}"/>
use-attribute-sets namelist Optional A white space separated list of attribute-sets containing attributes to be added to the element

Example

Consider the following example about a bookstore:

books.xmlxml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="books.xsl"?>

<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="web">
        <title lang="en">XQuery Tips</title>
        <author>Tom Nolan</author>
        <year>2022</year>
        <price>39.99</price>
    </book>
    <book category="web">
        <title lang="en">Learn XML</title>
        <author>Tutorial Reference</author>
        <year>2022</year>
        <price>9.99</price>
    </book>
</bookstore>

Create a "writer" element that contains the value of each author element:

books.xslxml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <xsl:for-each select="bookstore/book">
            <xsl:element name="writer">
                <xsl:value-of select="author"/>
            </xsl:element>
            <br/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
Navigation