import ballerina/io;
import ballerina/xslt;

public function main() returns error? {
    // Gets an `XML` value, which needs to be transformed.
    xml sourceXml = getXml();
    // Gets an `XSL` style sheet represented in an XML value.
    xml xsl = getXsl();
    // [Transforms](https://docs.central.ballerina.io/ballerina/xslt/latest/functions#transform) the `XML` content to another format.
    xml target = check xslt:transform(sourceXml, xsl);
    
    io:println("Transformed XML: ", target);
}

// Returns an `XML` element, which needs to be transformed.
function getXml() returns xml {
    return xml `<samples>
                    <song>
                        <title>Summer of 69</title>
                        <artist>Bryan Adams</artist>
                        <country>Canada</country>
                        <year>1984</year>
                    </song>
                    <song>
                        <title>Zombie</title>
                        <artist>Bad Wolves</artist>
                        <country>USA</country>
                        <year>2018</year>
                    </song>
                </samples>`;
}

// Returns an `XSL` style sheet represented by an XML element.
function getXsl() returns xml {
    return xml
        `<xsl:stylesheet version="1.0" 
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="/">
                <html>
                    <body>
                        <h2>All time favourites</h2>
                        <table border="1">
                            <tr bgcolor="#9acd33">
                                <th>Title</th>
                                <th>Artist</th>
                            </tr>
                        <xsl:for-each select="samples/song">
                            <tr>
                                <td>
                                    <xsl:value-of select="title"/>
                                </td>
                                <td>
                                    <xsl:value-of select="artist"/>
                                </td>
                            </tr>
                        </xsl:for-each>
                        </table>
                    </body>
                </html>
            </xsl:template>
        </xsl:stylesheet>`;
}

XSLT Transformation

This example demonstrates how XML content can be transformed to HTML using a given XSL transformation. For more information on the underlying module, see the XSLT module.

import ballerina/io;
import ballerina/xslt;
public function main() returns error? {
    xml sourceXml = getXml();

Gets an XML value, which needs to be transformed.

    xml xsl = getXsl();

Gets an XSL style sheet represented in an XML value.

    xml target = check xslt:transform(sourceXml, xsl);
    
    io:println("Transformed XML: ", target);
}

Transforms the XML content to another format.

function getXml() returns xml {
    return xml `<samples>
                    <song>
                        <title>Summer of 69</title>
                        <artist>Bryan Adams</artist>
                        <country>Canada</country>
                        <year>1984</year>
                    </song>
                    <song>
                        <title>Zombie</title>
                        <artist>Bad Wolves</artist>
                        <country>USA</country>
                        <year>2018</year>
                    </song>
                </samples>`;
}

Returns an XML element, which needs to be transformed.

function getXsl() returns xml {
    return xml
        `<xsl:stylesheet version="1.0" 
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="/">
                <html>
                    <body>
                        <h2>All time favourites</h2>
                        <table border="1">
                            <tr bgcolor="#9acd33">
                                <th>Title</th>
                                <th>Artist</th>
                            </tr>
                        <xsl:for-each select="samples/song">
                            <tr>
                                <td>
                                    <xsl:value-of select="title"/>
                                </td>
                                <td>
                                    <xsl:value-of select="artist"/>
                                </td>
                            </tr>
                        </xsl:for-each>
                        </table>
                    </body>
                </html>
            </xsl:template>
        </xsl:stylesheet>`;
}

Returns an XSL style sheet represented by an XML element.

bal run xslt_transformation.bal
Transformed XML: <html>
<body>
<h2>All time favourites</h2>
<table border="1">
<tr bgcolor="#9acd33">
<th>Title</th><th>Artist</th>
</tr>
<tr>
<td>Summer of 69</td><td>Bryan Adams</td>
</tr>
<tr>
<td>Zombie</td><td>Bad Wolves</td>
</tr>
</table>
</body>
</html>