XML / XSLT gegevens invullen in tabel

Status
Niet open voor verdere reacties.

jeankevg

Nieuwe gebruiker
Lid geworden
11 aug 2009
Berichten
2
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:output 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:param name="huidiguur"/>

<xsl:param name="totaluren"/>

<xsl:param name="totaldagen"/>

<xsl:if test="$huidiguur &lt;= $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:param name="huidiguur"/>

<xsl:param name="huidigedag"/>

<xsl:param name="totaldagen"/>

<xsl:if test="$huidigedag &lt;= $totaldagen">

<xsl:variable name="bgColor">

<xsl:choose>

<xsl:when test="$huidiguur = 0 or $huidigedag = 0 or $huidigedag = 6">green</xsl:when>

<xsl:otherwise>yellow</xsl:otherwise>

</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:otherwise>
<xsl:value-of select="floor(7.5 +($huidiguur div 2))"/>.45
</xsl:otherwise>
</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:otherwise>
<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:otherwise>
leeg
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:otherwise>

</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:otherwise>
<td bgcolor="{$bgColor}" align="center" valign="top" width="150" height="23">

<xsl:value-of select="$value"/>

</td>
</xsl:otherwise>

</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:
Ik heb de oplossing ondertussen gevonden, bedankt voor diegene die er hene hebbe gekeken!
de oplossing was dus:

[XML]<xsl:value-of select="/rooster/les[beginuur=$huidiguur+15][dag=$huidigedag]"/>[/XML]

groeten,
Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan