IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs XML Discussion :

Compteur XSL ou Velocity


Sujet :

APIs XML

  1. #1
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut Compteur XSL ou Velocity
    Bonjour, je cherche a incrémenter un compteur en XSL mais sans résultat. J'ai posté ici parce que j'utilise également Velocity , mais n'ai pas non plus réussi a crée un compteur en Vélocity.


    Merci



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
        <xsl:template match="/WORKBENCH_PROJECT/Projects/Project/Tasks">
    		<xsl:variable name="compteur">0</xsl:variable>
    		<xsl:for-each select="Task/Assignments/Assignment/@resourceID">
    				<xsl:if test="ancestor::Assignment/Curve[@name='baseLine']!=''">
            				<xsl:for-each select="ancestor::Assignment/Curve[@name='baseLine']/Segments/Segment">
            				<xsl:variable name="compteur">
     
            			    <xsl:if test="Calendar">
            				<xsl:for-each select="Calendar/Days/Day">
            				<xsl:if test="@isWorkDay='false'">
            				$date.ajouterTacheConges("<xsl:value-of select="$compteur+1"/>","3","<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="ancestor::Task/@name"/>","<xsl:value-of select="@start"/>","<xsl:value-of select="@dayOfWeek"/>","<xsl:value-of select="@isWorkDay"/>")
            				</xsl:if>
            				</xsl:for-each>
            				</xsl:if>
     
            				<xsl:if test="not(@dayOfWeek)">
            				<xsl:for-each select="Calendar/Days/Day">  				
     						<xsl:if test="@isWorkDay='true'">
     						<xsl:for-each select="Shifts/Shift"> 
      						$date.ajouterDemiJournee("<xsl:value-of select="$compteur+1"/>","<xsl:value-of select="ancestor::Day/@start"/>","<xsl:value-of select="ancestor::Task/@name"/>","3","<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="@start"/>","<xsl:value-of select="@finish"/>")
      						</xsl:for-each> 						
      						</xsl:if>
      						</xsl:for-each>
      						</xsl:if>
     
      						<xsl:if test="Calendar">
            				<xsl:for-each select="Calendar/Days/Day">
            				$date.ajouterJoursNonOuvres("<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="ancestor::Task/@name"/>","<xsl:value-of select="@dayOfWeek"/>","<xsl:value-of select="@isWorkDay"/>")    
            				</xsl:for-each>
            				</xsl:if>
     
        			<tr>		
             			<td><xsl:value-of select="ancestor::WORKBENCH_PROJECT/Projects/Project/@name"/></td>
    					<td align="center"><xsl:value-of select="ancestor::Task/@name" /></td>
    					<td><xsl:value-of select="ancestor::Assignment/@resourceID" /></td>   
    					<td><xsl:variable name="fulname" select="ancestor::Assignment/@resourceID"/><xsl:for-each select="/WORKBENCH_PROJECT/PoolResources/PoolResource[@resourceId=$fulname]"><xsl:value-of select="@fullName"/></xsl:for-each></td>      
                  		<td><xsl:value-of select="substring-before(@start,'T')" /></td>								
              		  	<td><xsl:value-of select="substring-before(@finish,'T')" /></td>
    					<td>#set ($nbJours = $date.calculerNbJoursActuals("<xsl:value-of select="$compteur+1"/>","3","<xsl:value-of select="ancestor::Task/@name"/>","<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="@finish" />","<xsl:value-of select="@rate" />","<xsl:value-of select="@start" />")) 
                				$nbJours</td>
     
     
    				</tr>
    				</xsl:variable>
    			</xsl:for-each>
             		</xsl:if>
             </xsl:for-each>  
       </xsl:template>

    je cherche une incrémentation à partir de cette boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "ancestor::Assignment/Curve[@name='baseLine']/Segments/Segment">

  2. #2
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    La seule méthode que j'ai trouvé est de faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date.ajouterTacheConges("<xsl:value-of select="count(preceding::Segment)+1"/>","1","<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="ancestor::Task/@name"/>","<xsl:value-of select="@start"/>","<xsl:value-of select="@dayOfWeek"/>","<xsl:value-of select="@isWorkDay"/>")
    Mais je multiplie par 100 le temps de traitement de l'appli !!!!

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    J'ai du mal à cerner ce que tu comptes exactement et peut être n'est-ce pas adapté à ton cas. Mais juste au cas où, tu peux utiliser les fonctions position() last() et first() pour tracer à quelle itération en est une boucle for-each.

  4. #4
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    En fait je souhaite récuperer une valeure unique pour chaque boucle, pour un traitement ulterieur.

    Donc j'ai pensé a un compteur tout bete, mais c'est pas si bete que ca en XSl....

    J'ai donc essayé de compter le nb de noeud "Segment", a partir de ce For-each :

    <xsl:for-each select="ancestor::Assignment/Curve[@name='estimates']/Segments/Segment">



    en utilisant <xsl:value-of select="count(preceding::Segment)+1"/>

    Le probleme est que j'ai des fichiers XML contenant 500 000 lignes , donc le count() fait ralentir énormement le traitement, et je 'narrive pas a faire un comteur tout bete , partant de 0 et s'incrémentant a chaque boucle.......


    Merci d'avance

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    dans ce contexte il est préférable d'utiliser xsl:number...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Merci GrandFather , mais le resultat est quasiment aussi lent avec xsl:number.........


    Ne serait il pas possible de créer un compteur tout simple avec xsl:variable (ne pas prendre le num des noeuds) partant de zéro? je pense que cette solution n'entrainerais pas d'augmentation trop importante de temps, seul probleme je n'arrive pas à le créer....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        <xsl:template match="/WORKBENCH_PROJECT/Projects/Project/Tasks">
     
    		<xsl:for-each select="Task/Assignments/Assignment/@resourceID">
    				<xsl:if test="ancestor::Assignment/Curve[@name='baseLine']!=''">
            				<xsl:for-each select="ancestor::Assignment/Curve[@name='baseLine']/Segments/Segment">
    					/*LE COMPTEUR DOIT S INCREMENTER A PARTIR DU FOR EACH CI DESSUS*/									       								       					
        			<tr>		
             			<td><xsl:value-of select="ancestor::WORKBENCH_PROJECT/Projects/Project/@name"/></td>
    					<td align="center"><xsl:value-of select="ancestor::Task/@name" /></td>
    					<td><xsl:value-of select="ancestor::Assignment/@resourceID" /></td>   
    					<td><xsl:variable name="fulname" select="ancestor::Assignment/@resourceID"/><xsl:for-each select="/WORKBENCH_PROJECT/PoolResources/PoolResource[@resourceId=$fulname]"><xsl:value-of select="@fullName"/></xsl:for-each></td>      
                  		<td><xsl:value-of select="substring-before(@start,'T')" /></td>								
              		  	<td><xsl:value-of select="substring-before(@finish,'T')" /></td>
    					<td>#set ($nbJours = $date.calculerNbJoursActuals(/*ICI LA VARIABLE INCREMENTE*/,"3","<xsl:value-of select="ancestor::Task/@name"/>","<xsl:value-of select="ancestor::Assignment/@resourceID"/>","<xsl:value-of select="@finish" />","<xsl:value-of select="@rate" />","<xsl:value-of select="@start" />")) 
                				$nbJours</td>
     
     
    				</tr>
     
    			</xsl:for-each>
             		</xsl:if>
             </xsl:for-each>  
       </xsl:template>

  7. #7
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Ma question est compliqué ou stupide ???

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Disons que ton exemple est complexe, j'ai un peu la flemme j'avoue.

  9. #9
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    S'il te plait ca me rendrais vraiment service !!!!

    J'ai essayé avec xsl:varaible et xsl:number , mais ne connaissant pas bien le XSLT j'ai pas réussi a trouver quelque de viable....

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    tu peux peut être repenser ta boucle for-each pour faire des appels en récursif à un template nommé en passant en paramètre la variable incrémenté.
    Voila un exemple simpliste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:template match="/">
    	<root>
    		<xsl:call-template name = "maFonction" >
    				<xsl:with-param name="count">1</xsl:with-param>
    		</xsl:call-template>
    	</root>
    	</xsl:template>
     
    	<xsl:template name="maFonction">
    		<xsl:param name="count" />
    		<xsl:if test="$count != 1500">
    			<xsl:value-of select="$count"/>,<xsl:call-template name = "maFonction" >
    				<xsl:with-param name="count"><xsl:value-of select="$count+1"/></xsl:with-param>
    			</xsl:call-template>		
    		</xsl:if>	
    	</xsl:template>
    </xsl:stylesheet>

  11. #11
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Merci Morbo ca a l'air tres bien ce que tu m'a expliqué !!!!!

    Par contre je ne comprend pas l'interet du xsl:if ??
    c'etait juste pour alimenter l'exemple??

    Merci beaucoup en tout cas.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    oui, c'était juste histoire de pas avoir une récursion infinie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] utilisation de <xsl:call-template>/compteur xsl
    Par ogn dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 05/02/2008, 11h22
  2. Compteur XSL...Portée des variables limitée
    Par lanfeustdetroy dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 03/06/2005, 15h12
  3. [XSL]compteur
    Par Slein dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2005, 15h18
  4. [XSL] Debutant : créer un compteur.
    Par castaka dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/04/2005, 16h13
  5. [XSL FO] Compteur a partir de 2
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/06/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo