Repartir des elements dans une page grace au XSL - XML/XSL - Programmation
Marsh Posté le 11-12-2003 à 14:10:03
XML :
Code :
|
XSL :
Code :
|
Output :
Code :
|
Y a peut être plus simple ...
Marsh Posté le 11-12-2003 à 17:29:50
Sans vouloir abuser de ta gentillesse,il faudrait que le XSL genere obligatoirement 4 lignes c a d:
<HTML>
<TABLE BORDER="1">
<TR>
<TD>Capacity=01 - Class=P</TD>
<TD>Capacity=02 - Class=J</TD>
<TD>Capacity=03 - Class=Y</TD>
<TD>Capacity=04 - Class=D</TD>
<TD>Capacity=05 - Class=N</TD>
<TD>Capacity=06 - Class=Z</TD>
<TD>Capacity=07 - Class=S</TD>
</TR>
<TR>
<TD>Capacity=08 - Class=P</TD>
<TD>Capacity=09 - Class=J</TD>
<TD>Capacity=10 - Class=Y</TD>
<TD>Capacity=11 - Class=D</TD>
<TD>Capacity=12 - Class=N</TD>
<TD>Capacity=13 - Class=Z</TD>
<TD>Capacity=14 - Class=S</TD>
</TR>
<TR>
<TD>Capacity=15 - Class=P</TD>
<TD>Capacity=16 - Class=J</TD>
<TD>Capacity=17 - Class=Y</TD>
<TD>Capacity=18 - Class=D</TD>
<TD>Capacity=19 - Class=N</TD>
<TD>Capacity=20 - Class=Z</TD>
<TD>Capacity=21 - Class=S</TD>
</TR>
<TR></TR>
</TABLE>
</HTML>
Marsh Posté le 11-12-2003 à 17:30:51
au fait si il cree 2 lignes il doit en rajouter 2 si 1 il en rajoute 3 et si il en cree 4 il en rajoute aucune comment faire?
Marsh Posté le 11-12-2003 à 17:31:45
ca veut dire quoi ?
4 lignes quelque soit le nombre de noeud <Configuration> ?
des lignes vides si y a moins de 4*7 noeud et ne pas générer plus de ligne si y en a plus de 4*7 ?
Marsh Posté le 11-12-2003 à 17:34:26
au fait j'ai une routine JS qui se base sur 4 ligne et si y'en a moins ca bugge..
Au fait si tu as par exemple 13 configuration ce qui donnerait 2 lignes generees par le XSL alors il faudrait rajouter 2 lignes vides:
<TR></TR>
<TR></TR>
Marsh Posté le 11-12-2003 à 17:43:18
et si y a 15 configurations, y a 2 lignes pleines et 2 vides ou 2 plein, 1 incomplète et 1 vide ?
Marsh Posté le 11-12-2003 à 18:00:30
si 15 config:
3 lignes pleines
1 vide
1e line: 7 config
2e line: 7 config
3e line: 1 config
4e line: rien dedans
donc : 2 pleines, 1 incomplète (je dirais la capacite n'est pas pleinement exploitee ) et 1 vide
Marsh Posté le 11-12-2003 à 18:15:20
XSL :
Code :
|
----------------------------------------------------------------
XML, trop de config :
Code :
|
Résultat :
Code :
|
----------------------------------------------------------------
XML, pas assez de Config :
Code :
|
Résultat :
Code :
|
Avis aux forumeurs pour un XSL plus simple
Sinon, la je t'ai mis les colonnes max et lignes max en paramètre si tu veux modifier (7,4)...
... pas aussi simple qu'il y parait hein
Marsh Posté le 11-12-2003 à 18:26:55
merci je vais alleger ton XSL et te le renvoyer (du moins je vais essayer )
Marsh Posté le 12-12-2003 à 10:32:12
au fait y a peut etre mieux a faire:
<xsl:if test="((count(Configuration)-1) div $MAXCOL) + 1 < ($MAXLINE)">
</xsl:if>
cette clause me permet de determiner le nombre de lignes a rajouter mais je sais comment appliquer le resultat:
ce qu'il faut c'est :
<xsl:call-template name="TR" "##nfois##" />
avec "##nfois##" le resultat de la clause precedente
<xsl:template name="TR">
<TR/>
</xsl:template>
au fait la question est simple comment dire a call-template d'appliquer nfois un template
Marsh Posté le 12-12-2003 à 12:29:52
ReplyMarsh Posté le 12-12-2003 à 15:11:55
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="MAXCOL" select="'7'" />
<xsl:param name="MAXLINE" select="'4'" />
<xsl:template match="CLASSCONFIG">
<p class="InterfaceHeader_Title">Classes & Configuration</p>
<TABLE cellspacing="0" cellpadding="0">
<TR>
<TD width="380" height="44" class="InterfaceHeader_SubText">Classes
<input name="Input3" class="tf_normal" id="Classes" style="WIDTH: 300px; " size='9' maxlength='26'>
<xsl:attribute name="value">
<xsl:value-of select="@Classes" />
</xsl:attribute>
</input>
</TD>
<TD width="150" class="InterfaceHeader_SubText">Configuration
<INPUT name="Input" class="tf_mandatory" id="Class" style="WIDTH: 25px; " onKeyUp="Switch()" onChange="AddClassTotal()" size="3" maxLength="1" />
<INPUT name="Input" class="tf_mandatory" id="Capacity" style="WIDTH: 25px; " onChange="AddClassTotal()" size="3" maxLength="3" />
</TD>
</TR>
</TABLE>
<TABLE id="PowerFly">
<xsl:apply-templates select="Configuration[(position()+(-1)) mod 7 = 0]" mode="LINE" />
<xsl:call-template name="EmptyConf" >
<xsl:with-param name="LEFT" select="(4-(((count(Configuration)-1) div $MAXCOL) + 1))" />
</xsl:call-template>
</TABLE>
</xsl:template>
<xsl:template match="Configuration" mode="LINE">
<TR>
<xsl:apply-templates select="." />
<xsl:apply-templates select="following::Configuration[position()<7]" />
</TR>
</xsl:template>
<xsl:template match="Configuration">
<xsl:for-each select="./.">
<TD>
<INPUT class='tf_normal' style='WIDTH: 25px; ' size='1' maxLength='1' onChange='RemoveClass(this)'>
<xsl:attribute name="value">
<xsl:value-of select="@Class" />
</xsl:attribute>
</INPUT>
<INPUT class='tf_normal' style='WIDTH: 25px; ' size='3' maxLength='3'>
<xsl:attribute name="value">
<xsl:value-of select="@Capacity" />
</xsl:attribute>
</INPUT>
</TD>
</xsl:for-each>
</xsl:template>
<xsl:template name="EmptyConf">
<xsl:param name="LEFT" />
<TR/>
<xsl:if test="$LEFT > 1">
<xsl:call-template name="EmptyConf">
<xsl:with-param name="LEFT" select="$LEFT + (-1)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
voila et la c'est bon!
Merci encore Bibi Fok Lover
Marsh Posté le 12-12-2003 à 16:09:59
Quand tu poste du code ( XML, XSL où autre) pense à le mettre en fixed
|
pour éviter les smilies intempestifs!
Marsh Posté le 04-12-2003 à 14:06:37
bonjour voila j'ai un XML qui ressemble a ca:
<CLASSCONFIG Classes="AQWXSZEDCFRTYHGBNJKIUOPMLK">
<Configuration Capacity="006" Class="P" />
<Configuration Capacity="042" Class="J" />
<Configuration Capacity="204" Class="Y" />
<Configuration Capacity="21" Class="D" />
<Configuration Capacity="54" Class="N" />
<Configuration Capacity="102" Class="Z" />
<Configuration Capacity="98" Class="S" />
<Configuration Capacity="006" Class="P" />
<Configuration Capacity="042" Class="J" />
<Configuration Capacity="204" Class="Y" />
</CLASSCONFIG>
Chaque <Configuration> correspond a une colonne TD composee de 2 input (Capacity,Class)
J'ai 4 lignes <TR>:
<TR></TR>
<TR></TR>
<TR></TR>
<TR></TR>
et je voudrais distribuer mes TD a raison de 7 TD par lignes.
Il faudrait en fait faire une boucle qui tous les multiples de 7 passerait au TR suivant Comment Faire?
Message édité par PETOZAK le 04-12-2003 à 14:07:03