Dag beste mense allemaal,
Ik zit met een probleem dat te maken heeft met xml en xslt.Het zit namelijk zo dat ik een lessenrooster wil laten zien in een table in html.
Het is wel zo dat niet elke cell moet worden opgevuld.
de xml-file bestaat uit een opeenvolging van de volgende structuur
[XML]
<les>
<vak>9035</vak>
<docent>DDV</docent>
<lokaal>N105</lokaal>
<dag>3</dag>
<beginuur>17</beginuur>
<einduur>21</einduur>
</les>
[/XML]
In de tabel, horizontaal staat de opsomming van de dagen(maandag tot en met vrijdag)
vertikaal staan de uren waarop de lessen beginnen(van 8.15 tot 18.15)
in de xml kan je deze gegevens ook terug vinden: dag = 3 wijst op woensdag.
beginuur = 17 wijst op 8.45, dus de les begint op 8.45.
XSLT-file:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xslt">
<xsl
utput method="html"/>
<xsl:template match="/">
<xsl:variable name="uren" select="number(/rooster/MultiplicationTable/@Uren)"/>
<xsl:variable name="dagen" select="number(/rooster/MultiplicationTable/@Dagen)"/>
<html>
<head><title>Multiplication table <xsl:value-of select="concat($uren,concat(' x ', $dagen))"/></title></head>
<body>
<table cellpadding="2" cellspacing="1" bgcolor="black">
<xsl:call-template name="tekenRij">
<xsl:with-param name="huidiguur" select="0"/>
<xsl:with-param name="totaluren" select="$uren + 1"/> <!-- + 1 omdat titel in rekening brengen -->
<xsl:with-param name="totaldagen" select="$dagen + 1"/> <!-- + 1 omdat ik de uren ook nog op het einde van de tabel wil -->
</xsl:call-template>
</table>
</body></html>
</xsl:template>
<xsl:template name="tekenRij">
<xsl
aram name="huidiguur"/>
<xsl
aram name="totaluren"/>
<xsl
aram name="totaldagen"/>
<xsl:if test="$huidiguur <= $totaluren">
<tr>
<xsl:call-template name="tekenLes">
<xsl:with-param name="huidiguur" select="$huidiguur"/>
<xsl:with-param name="huidigedag" select="0"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</tr>
<xsl:call-template name="tekenRij">
<xsl:with-param name="huidiguur" select="$huidiguur + 1"/>
<xsl:with-param name="totaluren" select="$totaluren"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="tekenLes">
<xsl
aram name="huidiguur"/>
<xsl
aram name="huidigedag"/>
<xsl
aram name="totaldagen"/>
<xsl:if test="$huidigedag <= $totaldagen">
<xsl:variable name="bgColor">
<xsl:choose>
<xsl:when test="$huidiguur = 0 or $huidigedag = 0 or $huidigedag = 6">green</xsl:when>
<xsl
therwise>yellow</xsl
therwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="$huidiguur = 0 and $huidigedag = 0 or $huidiguur = 0 and $huidigedag = 6"></xsl:when>
<xsl:when test="$huidigedag = 0 or $huidigedag = 6">
<xsl:choose>
<xsl:when test="$huidiguur mod 2 = 1">
<xsl:value-of select="floor(7.5 +($huidiguur div 2))"/>.15
</xsl:when>
<xsl
therwise>
<xsl:value-of select="floor(7.5 +($huidiguur div 2))"/>.45
</xsl
therwise>
</xsl:choose>
</xsl:when>
<xsl:when test="$huidiguur = 0">
<xsl:choose>
<xsl:when test="$huidigedag = 1">Maandag</xsl:when>
<xsl:when test="$huidigedag = 2">Dinsdag</xsl:when>
<xsl:when test="$huidigedag = 3">Woensdag</xsl:when>
<xsl:when test="$huidigedag = 4">Donderdag</xsl:when>
<xsl:when test="$huidigedag = 5">Vrijdag</xsl:when>
</xsl:choose>
</xsl:when>
<xsl
therwise>
<xsl:for-each select ="/">
<xsl:choose>
<xsl:when test="/rooster/les/beginuur = ($huidiguur + 15) and /rooster/les/dag = $huidigedag">
<xsl:value-of select="/rooster/les"/>
</xsl:when>
<xsl
therwise>
leeg
</xsl
therwise>
</xsl:choose>
</xsl:for-each>
</xsl
therwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$huidigedag = 0 or $huidigedag = 6">
<td bgcolor="{$bgColor}" align="center" valign="top" width="75" height="23">
<xsl:value-of select="$value"/>
</td>
</xsl:when>
<xsl
therwise>
<td bgcolor="{$bgColor}" align="center" valign="top" width="150" height="23">
<xsl:value-of select="$value"/>
</td>
</xsl
therwise>
</xsl:choose>
<xsl:call-template name="tekenLes">
<xsl:with-param name="huidiguur" select="$huidiguur"/>
<xsl:with-param name="huidigedag" select="$huidigedag + 1"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>[/XML]
Deze xslt moet er voor zorgen dat hij de juiste data in de tabel invult.Maar hij voegt slechts 1 les in bijna elk vak je in. Ik heb ook al geprobeerd om de choose functie te gebruiken en vanalles geprobeerd om mijn test te veranderen, maar ik ben nu echt wel ten einde raad.
Ik hoop dat iemand mij kan helpen en dat ik genoeg data heb late zien. Als dit niet zo mocht zijn dan laat je dat maar weten.
Met vriendelijke groeten,
Jan Van Gemert
Ik zit met een probleem dat te maken heeft met xml en xslt.Het zit namelijk zo dat ik een lessenrooster wil laten zien in een table in html.
Het is wel zo dat niet elke cell moet worden opgevuld.
de xml-file bestaat uit een opeenvolging van de volgende structuur
[XML]
<les>
<vak>9035</vak>
<docent>DDV</docent>
<lokaal>N105</lokaal>
<dag>3</dag>
<beginuur>17</beginuur>
<einduur>21</einduur>
</les>
[/XML]
In de tabel, horizontaal staat de opsomming van de dagen(maandag tot en met vrijdag)
vertikaal staan de uren waarop de lessen beginnen(van 8.15 tot 18.15)
in de xml kan je deze gegevens ook terug vinden: dag = 3 wijst op woensdag.
beginuur = 17 wijst op 8.45, dus de les begint op 8.45.
XSLT-file:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xslt">
<xsl

<xsl:template match="/">
<xsl:variable name="uren" select="number(/rooster/MultiplicationTable/@Uren)"/>
<xsl:variable name="dagen" select="number(/rooster/MultiplicationTable/@Dagen)"/>
<html>
<head><title>Multiplication table <xsl:value-of select="concat($uren,concat(' x ', $dagen))"/></title></head>
<body>
<table cellpadding="2" cellspacing="1" bgcolor="black">
<xsl:call-template name="tekenRij">
<xsl:with-param name="huidiguur" select="0"/>
<xsl:with-param name="totaluren" select="$uren + 1"/> <!-- + 1 omdat titel in rekening brengen -->
<xsl:with-param name="totaldagen" select="$dagen + 1"/> <!-- + 1 omdat ik de uren ook nog op het einde van de tabel wil -->
</xsl:call-template>
</table>
</body></html>
</xsl:template>
<xsl:template name="tekenRij">
<xsl

<xsl

<xsl

<xsl:if test="$huidiguur <= $totaluren">
<tr>
<xsl:call-template name="tekenLes">
<xsl:with-param name="huidiguur" select="$huidiguur"/>
<xsl:with-param name="huidigedag" select="0"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</tr>
<xsl:call-template name="tekenRij">
<xsl:with-param name="huidiguur" select="$huidiguur + 1"/>
<xsl:with-param name="totaluren" select="$totaluren"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="tekenLes">
<xsl

<xsl

<xsl

<xsl:if test="$huidigedag <= $totaldagen">
<xsl:variable name="bgColor">
<xsl:choose>
<xsl:when test="$huidiguur = 0 or $huidigedag = 0 or $huidigedag = 6">green</xsl:when>
<xsl


</xsl:choose>
</xsl:variable>
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="$huidiguur = 0 and $huidigedag = 0 or $huidiguur = 0 and $huidigedag = 6"></xsl:when>
<xsl:when test="$huidigedag = 0 or $huidigedag = 6">
<xsl:choose>
<xsl:when test="$huidiguur mod 2 = 1">
<xsl:value-of select="floor(7.5 +($huidiguur div 2))"/>.15
</xsl:when>
<xsl

<xsl:value-of select="floor(7.5 +($huidiguur div 2))"/>.45
</xsl

</xsl:choose>
</xsl:when>
<xsl:when test="$huidiguur = 0">
<xsl:choose>
<xsl:when test="$huidigedag = 1">Maandag</xsl:when>
<xsl:when test="$huidigedag = 2">Dinsdag</xsl:when>
<xsl:when test="$huidigedag = 3">Woensdag</xsl:when>
<xsl:when test="$huidigedag = 4">Donderdag</xsl:when>
<xsl:when test="$huidigedag = 5">Vrijdag</xsl:when>
</xsl:choose>
</xsl:when>
<xsl

<xsl:for-each select ="/">
<xsl:choose>
<xsl:when test="/rooster/les/beginuur = ($huidiguur + 15) and /rooster/les/dag = $huidigedag">
<xsl:value-of select="/rooster/les"/>
</xsl:when>
<xsl

leeg
</xsl

</xsl:choose>
</xsl:for-each>
</xsl

</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$huidigedag = 0 or $huidigedag = 6">
<td bgcolor="{$bgColor}" align="center" valign="top" width="75" height="23">
<xsl:value-of select="$value"/>
</td>
</xsl:when>
<xsl

<td bgcolor="{$bgColor}" align="center" valign="top" width="150" height="23">
<xsl:value-of select="$value"/>
</td>
</xsl

</xsl:choose>
<xsl:call-template name="tekenLes">
<xsl:with-param name="huidiguur" select="$huidiguur"/>
<xsl:with-param name="huidigedag" select="$huidigedag + 1"/>
<xsl:with-param name="totaldagen" select="$totaldagen"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>[/XML]
Deze xslt moet er voor zorgen dat hij de juiste data in de tabel invult.Maar hij voegt slechts 1 les in bijna elk vak je in. Ik heb ook al geprobeerd om de choose functie te gebruiken en vanalles geprobeerd om mijn test te veranderen, maar ik ben nu echt wel ten einde raad.
Ik hoop dat iemand mij kan helpen en dat ik genoeg data heb late zien. Als dit niet zo mocht zijn dan laat je dat maar weten.
Met vriendelijke groeten,
Jan Van Gemert
Laatst bewerkt: