XML

| KOTISIVU | KURSSIKUVAUS | OHJELMA |

Harjoitusesimerkki 7f: XSL ja funktionaalinen ohjelmointi

Seuraava XSL-muunnos laskee luvun kertoman (factorial.xsl). Tutki sen logiikka.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<!-- Defining and Calling the Factorial Function in XSLT -->
<!-- A separate file factorial-main.xml provides specific arguments -->
<!-- call factorial on selected integer argument n -->

<xsl:template match="/arguments/a1">

<html>
<head>
<title>factorial(<xsl:value-of select="."/>)</title>
</head>
<body>

<xsl:call-template name="factorial">
<xsl:with-param name="n" select="."/>
</xsl:call-template>
</body>

</html>
</xsl:template>

<!-- define factorial(n) recursively using factor variable -->

<xsl:template name="factorial">
<xsl:param name="n"/>
<xsl:choose>
<xsl:when test="$n = 0">1</xsl:when>
<!-- factorial(0) = 1 -->
<xsl:when test="$n > 0"> <!-- factorial(n) = -->
<xsl:variable name="factor">
<xsl:call-template name="factorial">
<xsl:with-param name="n" select="$n - 1"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$n * $factor"/> <!-- n*factorial(n-1) -->
</xsl:when>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

Kutsuva XML-tiedosto:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="factorial.xsl" type="text/xsl"?>

<!-- change integer for different applications -->
<arguments>

<a1>10</a1>

</arguments>

Kokeile. Mieti, miten ohjelma voidaan muuntaa esim. sellaiseksi, että se laskee monta eri kertomaa, tai vaikka summan. Tai jos keksit, kehitä jokin muu ohjelma, joka soveltuu XSL-kieleen.

| KOTISIVU | KURSSIKUVAUS | OHJELMA |

Päivittänyt: Jaana Holvikivi
Muutettu 2.2.2010