XSLT

XSLT (lyhenne sanoista Extensible Stylesheet Language Transformations) on XML-pohjainen merkintäkieli XML-tiedostojen muunnoksiin. Kielen perusperiaatteisiin kuuluu, että alkuperäistä dokumenttia (tässä tapauksessa XML-dokumenttia) ei muuteta, vaan pikemminkin pinnoitetaan aivan kuten Cascading Style Sheets tekee hypertekstille (HTML- ja XHTML-dokumenteille). XSLT-kuvauskieli ei ota myöskään kantaa ulosantiin, jolloin yhdestä ja samasta XML-dokumentista on mahdollista saada ulos niin HTML-taittoinen, ihmisluettava sivu kuin konekielinen, esimerkiksi CSV-tiedostokin.
World Wide Web Consortium kehitti XSLT:n aikaisemman, Extensible Stylesheet Languagen seuraajaksi vuosien 1998 ja 1999 aikana. Tuolloin kehitettiin myös XSL Formatting Objects sekä XPath. Nykyisin yleisimmin käytössä on versio 1.0, mutta 3. lokakuuta 2005 W3C myönsi alustavan suosituksen XSLT 2.0:lle.

XML-dokumentin muuntaminen

<?xml version="1.0" encoding="iso-8859-1"?><henkilot>
   <henkilo id="1234-A">
      <etunimi>Matti</etunimi>
      <sukunimi>Meikäläinen</sukunimi>
   </henkilo>
   <henkilo id="5678-C">
      <etunimi>Maija</etunimi>
      <sukunimi>Meikäläinen</sukunimi>
   </henkilo></henkilot>
Yllä oleva dokumentti sisältää siis kaksi henkilöä, Matti Meikäläisen sekä Maija Meikäläisen. Kun mietitään selkokielisempää esitystapaa, voitaisiin dokumentti esittää esimerkiksi HTML-taulukkona XSL-tyylisivun kautta:
<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns="http://www.w3.org/1999/xhtml">

   <xsl:output method="xml" indent="yes" encoding="iso-8859-1"
       doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    
   <!-- XHTML-dokumentin ylätunniste --> 
   <xsl:template match="/">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
         <head>
            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8951-1" />
            <title>Meikäläiset</title>
         </head>
         <body>
            <xsl:apply-templates/>
         </body>
      </html>
   </xsl:template>
    
   <!-- taulukko -->
   <xsl:template match="henkilot">
      <h1>Henkilöt</h1>
      <table>
         <tr>
            <th>id</th>
            <th>Etunimi</th>
            <th>Sukunimi</th>
         </tr>
         <xsl:apply-templates/>
      </table>
   </xsl:template>

   <!-- henkilörivit -->
   <xsl:template match="henkilo">
      <tr>
         <td><xsl:value-of select="@id"/></td>
         <td><xsl:value-of select="etunimi"/></td>
         <td><xsl:value-of select="sukunimi"/></td>
      </tr>
   </xsl:template>
    
</xsl:stylesheet>
Toisaalta CSV-tiedoston tuottaminen samasta tiedostosta tapahtuisi taas:
<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

   <xsl:output method="text"/> 

   <xsl:template match="/henkilot">
      <xsl:text>"id","Etunimi","Sukunimi"&amp;#10;</xsl:text>
      <xsl:apply-templates select="henkilo"/>
   </xsl:template>

   <xsl:template match="henkilo">
      <xsl:value-of select="concat('&amp;quot;', @id, '&amp;quot;,&amp;quot;',                    etunimi, '&amp;quot;,&amp;quot;', sukunimi, '&amp;quot;&amp;#10;')"/>
   </xsl:template>
   
</xsl:stylesheet>