Repartir des elements dans une page grace au XSL

Repartir des elements dans une page grace au XSL - XML/XSL - Programmation

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
Reply

Marsh Posté le 04-12-2003 à 14:06:37   

Reply

Marsh Posté le 11-12-2003 à 14:10:03    

XML :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <CLASSCONFIG Classes="AQWXSZEDCFRTYHGBNJKIUOPMLK">
  3.   <Configuration Capacity="01" Class="P" />
  4.   <Configuration Capacity="02" Class="J" />
  5.   <Configuration Capacity="03" Class="Y" />
  6.   <Configuration Capacity="04" Class="D" />
  7.   <Configuration Capacity="05" Class="N" />
  8.   <Configuration Capacity="06" Class="Z" />
  9.   <Configuration Capacity="07" Class="S" />
  10.   <Configuration Capacity="08" Class="P" />
  11.   <Configuration Capacity="09" Class="J" />
  12.   <Configuration Capacity="10" Class="Y" />
  13.   <Configuration Capacity="11" Class="D" />
  14.   <Configuration Capacity="12" Class="N" />
  15.   <Configuration Capacity="13" Class="Z" />
  16.   <Configuration Capacity="14" Class="S" />
  17.   <Configuration Capacity="15" Class="P" />
  18.   <Configuration Capacity="16" Class="J" />
  19.   <Configuration Capacity="17" Class="Y" />
  20.   <Configuration Capacity="18" Class="D" />
  21.   <Configuration Capacity="19" Class="N" />
  22.   <Configuration Capacity="20" Class="Z" />
  23.   <Configuration Capacity="21" Class="S" />
  24. </CLASSCONFIG>


 
XSL :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet
  3. version="1.1"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5. <xsl:template match="/CLASSCONFIG">
  6. <HTML>
  7.  <TABLE BORDER="1">
  8.   <xsl:apply-templates select="Configuration[(position()+(-1)) mod 7 = 0]" mode="LINE" />
  9.  </TABLE>
  10. </HTML>
  11. </xsl:template>
  12. <xsl:template match="Configuration" mode="LINE">
  13. <TR>
  14.  <xsl:apply-templates select="." />
  15.  <xsl:apply-templates select="following::Configuration[position()&lt;7]" />
  16. </TR>
  17. </xsl:template>
  18. <xsl:template match="Configuration">
  19. <TD>
  20.  Capacity=<xsl:value-of select="@Capacity" /> - Class=<xsl:value-of select="@Class" />
  21. </TD>
  22. </xsl:template>
  23. </xsl:stylesheet>


 
Output :
 

Code :
  1. <HTML>
  2.   <TABLE BORDER="1">
  3.     <TR>
  4.       <TD>Capacity=01 - Class=P</TD>
  5.       <TD>Capacity=02 - Class=J</TD>
  6.       <TD>Capacity=03 - Class=Y</TD>
  7.       <TD>Capacity=04 - Class=D</TD>
  8.       <TD>Capacity=05 - Class=N</TD>
  9.       <TD>Capacity=06 - Class=Z</TD>
  10.       <TD>Capacity=07 - Class=S</TD>
  11.     </TR>
  12.     <TR>
  13.       <TD>Capacity=08 - Class=P</TD>
  14.       <TD>Capacity=09 - Class=J</TD>
  15.       <TD>Capacity=10 - Class=Y</TD>
  16.       <TD>Capacity=11 - Class=D</TD>
  17.       <TD>Capacity=12 - Class=N</TD>
  18.       <TD>Capacity=13 - Class=Z</TD>
  19.       <TD>Capacity=14 - Class=S</TD>
  20.     </TR>
  21.     <TR>
  22.       <TD>Capacity=15 - Class=P</TD>
  23.       <TD>Capacity=16 - Class=J</TD>
  24.       <TD>Capacity=17 - Class=Y</TD>
  25.       <TD>Capacity=18 - Class=D</TD>
  26.       <TD>Capacity=19 - Class=N</TD>
  27.       <TD>Capacity=20 - Class=Z</TD>
  28.       <TD>Capacity=21 - Class=S</TD>
  29.     </TR>
  30.   </TABLE>
  31. </HTML>


 
Y a peut être plus simple ...  :whistle:

Reply

Marsh Posté le 11-12-2003 à 14:54:04    

Merci beaucoup chocoboy toujours aussi sympas :)

Reply

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>


Message édité par PETOZAK le 11-12-2003 à 17:30:07
Reply

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?

Reply

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 ?

Reply

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>

Reply

Marsh Posté le 11-12-2003 à 17:34:53    

c'est plus lair?

Reply

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 ?

Reply

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


Message édité par PETOZAK le 11-12-2003 à 18:01:50
Reply

Marsh Posté le 11-12-2003 à 18:00:30   

Reply

Marsh Posté le 11-12-2003 à 18:15:20    

XSL :

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet
  3. version="1.1"
  4. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  5. <xsl:param name="MAXCOL" select="'7'" />
  6. <xsl:param name="MAXLINE" select="'4'" />
  7. <xsl:template match="/CLASSCONFIG">
  8. <HTML>
  9.  <TABLE BORDER="1">
  10.   <xsl:apply-templates select="Configuration" mode="LINE" />
  11.   <xsl:if test="count(Configuration) div $MAXCOL &lt; ($MAXLINE)">
  12.    <xsl:variable name="TEMP">
  13.     <xsl:choose>
  14.      <xsl:when test="count(Configuration) mod $MAXCOL &gt; 0">1</xsl:when>
  15.      <xsl:otherwise>0</xsl:otherwise>
  16.     </xsl:choose>
  17.    </xsl:variable>
  18.    <xsl:call-template name="EmptyConf">
  19.     <xsl:with-param name="LEFT" select="$MAXLINE + -(count(Configuration) div $MAXCOL) + -($TEMP)" />
  20.    </xsl:call-template>
  21.   </xsl:if>
  22.  </TABLE>
  23. </HTML>
  24. </xsl:template>
  25. <xsl:template match="Configuration" mode="LINE">
  26. <xsl:if test="((position()+(-1)) mod $MAXCOL = 0) and ((position()+(-1)) div $MAXCOL &lt; $MAXLINE)">
  27.  <TR>
  28.   <xsl:apply-templates select="." />
  29.   <xsl:apply-templates select="following::Configuration[position() &lt; $MAXCOL]" />
  30.  </TR>
  31. </xsl:if>
  32. </xsl:template>
  33. <xsl:template match="Configuration">
  34. <TD>
  35.  Capacity=<xsl:value-of select="@Capacity" /> - Class=<xsl:value-of select="@Class" />
  36. </TD>
  37. </xsl:template>
  38. <xsl:template name="EmptyConf">
  39. <xsl:param name="LEFT" />
  40. <TR/>
  41. <xsl:if test="$LEFT &gt; 1">
  42.  <xsl:call-template name="EmptyConf">
  43.   <xsl:with-param name="LEFT" select="$LEFT + (-1)" />
  44.  </xsl:call-template>
  45. </xsl:if>
  46. </xsl:template>
  47. </xsl:stylesheet>


 
----------------------------------------------------------------
 
XML, trop de config :

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <CLASSCONFIG Classes="AQWXSZEDCFRTYHGBNJKIUOPMLK">
  3.   <Configuration Capacity="01" Class="P" />
  4.   <Configuration Capacity="02" Class="J" />
  5.   <Configuration Capacity="03" Class="Y" />
  6.   <Configuration Capacity="04" Class="D" />
  7.   <Configuration Capacity="05" Class="N" />
  8.   <Configuration Capacity="06" Class="Z" />
  9.   <Configuration Capacity="07" Class="S" />
  10.   <Configuration Capacity="08" Class="P" />
  11.   <Configuration Capacity="09" Class="J" />
  12.   <Configuration Capacity="10" Class="Y" />
  13.   <Configuration Capacity="11" Class="D" />
  14.   <Configuration Capacity="12" Class="N" />
  15.   <Configuration Capacity="13" Class="Z" />
  16.   <Configuration Capacity="14" Class="S" />
  17.   <Configuration Capacity="15" Class="P" />
  18.   <Configuration Capacity="16" Class="J" />
  19.   <Configuration Capacity="17" Class="Y" />
  20.   <Configuration Capacity="18" Class="D" />
  21.   <Configuration Capacity="19" Class="N" />
  22.   <Configuration Capacity="20" Class="Z" />
  23.   <Configuration Capacity="21" Class="S" />
  24.   <Configuration Capacity="22" Class="P" />
  25.   <Configuration Capacity="23" Class="J" />
  26.   <Configuration Capacity="24" Class="Y" />
  27.   <Configuration Capacity="25" Class="D" />
  28.   <Configuration Capacity="26" Class="N" />
  29.   <Configuration Capacity="27" Class="Z" />
  30.   <Configuration Capacity="28" Class="S" />
  31.   <Configuration Capacity="29" Class="P" />
  32.   <Configuration Capacity="30" Class="J" />
  33.   <Configuration Capacity="31" Class="Y" />
  34.   <Configuration Capacity="32" Class="D" />
  35.   <Configuration Capacity="33" Class="N" />
  36.   <Configuration Capacity="34" Class="Z" />
  37.   <Configuration Capacity="35" Class="S" />
  38. </CLASSCONFIG>


 
Résultat :

Code :
  1. <HTML>
  2.   <TABLE BORDER="1">
  3.     <TR>
  4.       <TD>Capacity=01 - Class=P</TD>
  5.       <TD>Capacity=02 - Class=J</TD>
  6.       <TD>Capacity=03 - Class=Y</TD>
  7.       <TD>Capacity=04 - Class=D</TD>
  8.       <TD>Capacity=05 - Class=N</TD>
  9.       <TD>Capacity=06 - Class=Z</TD>
  10.       <TD>Capacity=07 - Class=S</TD>
  11.     </TR>
  12.     <TR>
  13.       <TD>Capacity=08 - Class=P</TD>
  14.       <TD>Capacity=09 - Class=J</TD>
  15.       <TD>Capacity=10 - Class=Y</TD>
  16.       <TD>Capacity=11 - Class=D</TD>
  17.       <TD>Capacity=12 - Class=N</TD>
  18.       <TD>Capacity=13 - Class=Z</TD>
  19.       <TD>Capacity=14 - Class=S</TD>
  20.     </TR>
  21.     <TR>
  22.       <TD>Capacity=15 - Class=P</TD>
  23.       <TD>Capacity=16 - Class=J</TD>
  24.       <TD>Capacity=17 - Class=Y</TD>
  25.       <TD>Capacity=18 - Class=D</TD>
  26.       <TD>Capacity=19 - Class=N</TD>
  27.       <TD>Capacity=20 - Class=Z</TD>
  28.       <TD>Capacity=21 - Class=S</TD>
  29.     </TR>
  30.     <TR>
  31.       <TD>Capacity=22 - Class=P</TD>
  32.       <TD>Capacity=23 - Class=J</TD>
  33.       <TD>Capacity=24 - Class=Y</TD>
  34.       <TD>Capacity=25 - Class=D</TD>
  35.       <TD>Capacity=26 - Class=N</TD>
  36.       <TD>Capacity=27 - Class=Z</TD>
  37.       <TD>Capacity=28 - Class=S</TD>
  38.     </TR>
  39.   </TABLE>
  40. </HTML>


 
----------------------------------------------------------------
 
XML, pas assez de Config :

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <CLASSCONFIG Classes="AQWXSZEDCFRTYHGBNJKIUOPMLK">
  3.   <Configuration Capacity="01" Class="P" />
  4.   <Configuration Capacity="02" Class="J" />
  5.   <Configuration Capacity="03" Class="Y" />
  6.   <Configuration Capacity="04" Class="D" />
  7.   <Configuration Capacity="05" Class="N" />
  8.   <Configuration Capacity="06" Class="Z" />
  9.   <Configuration Capacity="07" Class="S" />
  10.   <Configuration Capacity="08" Class="P" />
  11.   <Configuration Capacity="09" Class="J" />
  12.   <Configuration Capacity="10" Class="Y" />
  13.   <Configuration Capacity="11" Class="D" />
  14.   <Configuration Capacity="12" Class="N" />
  15.   <Configuration Capacity="13" Class="Z" />
  16.   <Configuration Capacity="14" Class="S" />
  17.   <Configuration Capacity="15" Class="P" />
  18.   <Configuration Capacity="16" Class="J" />
  19.   <Configuration Capacity="17" Class="Y" />
  20. <!--
  21.   <Configuration Capacity="18" Class="D" />
  22.   <Configuration Capacity="19" Class="N" />
  23.   <Configuration Capacity="20" Class="Z" />
  24.   <Configuration Capacity="21" Class="S" />
  25.   <Configuration Capacity="22" Class="P" />
  26.   <Configuration Capacity="23" Class="J" />
  27.   <Configuration Capacity="24" Class="Y" />
  28.   <Configuration Capacity="25" Class="D" />
  29.   <Configuration Capacity="26" Class="N" />
  30.   <Configuration Capacity="27" Class="Z" />
  31.   <Configuration Capacity="28" Class="S" />
  32.   <Configuration Capacity="29" Class="P" />
  33.   <Configuration Capacity="30" Class="J" />
  34.   <Configuration Capacity="31" Class="Y" />
  35.   <Configuration Capacity="32" Class="D" />
  36.   <Configuration Capacity="33" Class="N" />
  37.   <Configuration Capacity="34" Class="Z" />
  38.   <Configuration Capacity="35" Class="S" />
  39. -->
  40. </CLASSCONFIG>


 
Résultat :

Code :
  1. <HTML>
  2.   <TABLE BORDER="1">
  3.     <TR>
  4.       <TD>Capacity=01 - Class=P</TD>
  5.       <TD>Capacity=02 - Class=J</TD>
  6.       <TD>Capacity=03 - Class=Y</TD>
  7.       <TD>Capacity=04 - Class=D</TD>
  8.       <TD>Capacity=05 - Class=N</TD>
  9.       <TD>Capacity=06 - Class=Z</TD>
  10.       <TD>Capacity=07 - Class=S</TD>
  11.     </TR>
  12.     <TR>
  13.       <TD>Capacity=08 - Class=P</TD>
  14.       <TD>Capacity=09 - Class=J</TD>
  15.       <TD>Capacity=10 - Class=Y</TD>
  16.       <TD>Capacity=11 - Class=D</TD>
  17.       <TD>Capacity=12 - Class=N</TD>
  18.       <TD>Capacity=13 - Class=Z</TD>
  19.       <TD>Capacity=14 - Class=S</TD>
  20.     </TR>
  21.     <TR>
  22.       <TD>Capacity=15 - Class=P</TD>
  23.       <TD>Capacity=16 - Class=J</TD>
  24.       <TD>Capacity=17 - Class=Y</TD>
  25.     </TR>
  26.     <TR />
  27.   </TABLE>
  28. </HTML>


 
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  :)


Message édité par chocoboy le 11-12-2003 à 18:22:06
Reply

Marsh Posté le 11-12-2003 à 18:26:55    

merci je vais alleger ton XSL et te le renvoyer (du moins je vais essayer  :) )

Reply

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 &lt; ($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


Message édité par PETOZAK le 12-12-2003 à 10:34:57
Reply

Marsh Posté le 12-12-2003 à 11:32:27    

Chocoboy -> beau travail!

Reply

Marsh Posté le 12-12-2003 à 12:29:52    

Avander a écrit :

Chocoboy -> beau travail!


 
Salut Avander  :hello:  
Cool, lundi, je change de boulot !

Reply

Marsh 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 &amp; 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()&lt;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 &gt; 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

Reply

Marsh Posté le 12-12-2003 à 16:09:59    

Quand tu poste du code ( XML, XSL où autre) pense à le mettre en fixed


le petit bouton marqué Fixe dans l'éditeur de messages

pour éviter les smilies intempestifs!  
 
 

Reply

Marsh Posté le 12-12-2003 à 16:12:43    

:) promis!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed