Bonjour à tous. J'ai un sacré défit pour mon premier projet xslt. Je débute et je ne connais pas encore toutes les roublardises du langage. Je vous soumet donc ce que j'ai fait.
Mon xml:
Bien sur le xml est extensible. Si l'on prend une carte de 200*200 de dimension, ça fait 40.000 cases....!!!!
Le but est de générer une carte de 10*10 cases quoi qu'il arrive. Cette carte est centrer de façon dynamique sur des coordonnées.
Voila donc comment je gere ca via mon xls:
Le template qui parse le xml:
Il lance la boucle des lignes Y. voici son code:
Chaque passage de boucle lance la création des colonnes.
Ce coup ci on créer les td pour chaque ligne et colonne. Le truc c que je fait un for each pour vérifier sir la case que l'on teste existe dans le xml. Par la suite si cette case est trouvée, on affichera des informations venant du xml.
Le truc c'est que si je génère un xml de 200*200 cases, cela devient extrêmement long.
Donc voila j'attends vos avis, si j'ai fait des erreurs ou qu'il y a moyen de faire mieux je suis preneur.
merci bien, Wells
Mon xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="carte.xsl" type="text/xsl"?>
<xml>
<cases><X>0</X><Y>5</Y></cases>
<cases><X>1</X><Y>5</Y></cases>
<cases><X>2</X><Y>5</Y></cases>
<cases><X>3</X><Y>5</Y></cases>
....
<cases><X>0</X><Y>6</Y></cases>
<cases><X>1</X><Y>6</Y></cases>
<cases><X>2</X><Y>6</Y></cases>
<cases><X>3</X><Y>6</Y></cases>
....
</xml>
Bien sur le xml est extensible. Si l'on prend une carte de 200*200 de dimension, ça fait 40.000 cases....!!!!
Le but est de générer une carte de 10*10 cases quoi qu'il arrive. Cette carte est centrer de façon dynamique sur des coordonnées.
Voila donc comment je gere ca via mon xls:
Le template qui parse le xml:
<xsl:template match="xml">
<html><body>
<p>Liste de nombres :</p>
<table cellpadding="0" cellspacing="0" border="1">
<xsl:call-template name="boucley" />
</table>
</body></html>
</xsl:template>
Il lance la boucle des lignes Y. voici son code:
<xsl:template name="boucley">
<xsl:param name="debuty" select="0" />
<xsl:param name="finy" select="10" />
<xsl:if test="$debuty < $finy">
<tr>
<xsl:call-template name="bouclex">
<xsl:with-param name="debuty" select="($debuty)" />
</xsl:call-template>
</tr>
<xsl:call-template name="boucley">
<xsl:with-param name="debuty" select="($debuty)+1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Chaque passage de boucle lance la création des colonnes.
<xsl:template name="bouclex">
<xsl:param name="debutx" select="0" />
<xsl:param name="debuty" select="0" />
<xsl:param name="finx" select="10" />
<xsl:if test="$debutx < $finx">
<td>
<xsl:for-each select="/xml/cases[X=$debutx and Y=$debuty]">
OK
</xsl:for-each>
</td>
<xsl:call-template name="bouclex">
<xsl:with-param name="debutx" select="($debutx)+1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Ce coup ci on créer les td pour chaque ligne et colonne. Le truc c que je fait un for each pour vérifier sir la case que l'on teste existe dans le xml. Par la suite si cette case est trouvée, on affichera des informations venant du xml.
Le truc c'est que si je génère un xml de 200*200 cases, cela devient extrêmement long.
Donc voila j'attends vos avis, si j'ai fait des erreurs ou qu'il y a moyen de faire mieux je suis preneur.
merci bien, Wells