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

XSL/XSLT/XPATH XML Discussion :

[XSLT][CSS][Javascript] xsl:for-each ne traite que le premier noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 84
    Points
    84
    Par défaut [XSLT][CSS][Javascript] xsl:for-each ne traite que le premier noeud
    bonjour à tous,

    j'essaie de créer un xslt qui met en forme un xml (normal) avec des fonction javascript qui permettront d'afficher ou faire disparaitre certaines colonnes d'un tableau.

    Le problème est que je n'arrive qu'à supprimer la colonne voulue mais seulement pour la première ligne.

    sauriez vous comment faire pour appliquer le même effet sur toutes les lignes?

    voici la partie XSLT permettant d'afficher la ligne contenant les colonnes que je voudrais faire disparaitre
    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
     
    		<xsl:for-each select="reportRG/rule">
    		<xsl:if test="functionnals">
    		<tr class="normal">
    			<td class="RG"><xsl:value-of select="@name"/></td>
    			<td id="descResultAffichage"><xsl:value-of select="functionnals/functionnal/@description"/></td>
    			<td><xsl:value-of select="functionnals/functionnal/@file"/></td>
    			<td>
    				<xsl:for-each select="methods/method">
    					<p class="normal"><xsl:value-of select="@methodName"/></p>
    				</xsl:for-each>
    			</td>
    			<td class="resultOk">
    				<xsl:for-each select="tests/test">
    					<xsl:if test="@result = 'Passed'">
    						<p class="normal"><xsl:value-of select="@methodName"/></p>
    					</xsl:if>
    				</xsl:for-each>
    			</td>
    			<td class="resultInconclusive">
    				<xsl:for-each select="tests/test">
    					<xsl:if test="@result = 'Inconclusive'">
    						<p class="normal"><xsl:value-of select="@methodName"/></p>
    					</xsl:if>
    				</xsl:for-each>
    			</td>
    			<td class="resultFailed">
    				<xsl:for-each select="tests/test">
    					<xsl:if test="@result = 'Failed'">
    						<p class="normal"><xsl:value-of select="@methodName"/></p>
    					</xsl:if>
    				</xsl:for-each>
    			</td>
    		</tr>
    		</xsl:if>
    		</xsl:for-each>
    voici le javascript que j'ai fait pour faire disparaitre la colonne voulue

    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
    49
    50
    51
    52
     
    		function afficheId(baliseId)
    		{
    			if (document.getElementById)
    			{
    				if(document.getElementById(baliseId) != null)
    				{
    					document.getElementById(element).style.visibility='visible';
    					document.getElementById(element).style.display='block';
    				}
    			}
    		}
     
    		function cacheId(baliseId)
    		{
    			if (document.getElementById)
    			{
    				if(document.getElementById(baliseId) != null)
    				{
    					document.getElementById(element).style.visibility='hidden';
    					document.getElementById(element).style.display='none';
    				}
    			}
    		}
    		/* permet d'afficher une colonne*/
    		function columnDisplay(idBalise, idBaliseAffichage)
    		{
    			afficheId(idBalise);
    			afficheId(idBaliseAffichage);
     
    		}
     
    		/* permet de cacher une colonne */
    		function columnHide(idBalise, idBaliseAffichage)
    		{			
    			cacheId(idBalise);
    			cacheId(idBaliseAffichage);
    		}
    /* permet de cacher une colonne si elle est affichée et inversement*/
    		function displayOrHideColumn(idCheckBox, idBalise, idBaliseAffichage)
    		{
    			if(idCheckBox.checked)
    			{
    				columnHide(idBalise,idBaliseAffichage);
    				idCheckBox.checked = false;
    			}
    			else
    			{
    				columnDisplay(idBalise,idBaliseAffichage);
    				idCheckBox.checked = true;
    			}
    		}
    et pour finir voici la checkbox qui permet de faire disparaitre ou apparaitre la 2eme colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="checkbox" name="descCheckBoxResult" onchange="displayOrHideColumn('descCheckBoxResult', 'descResult', 'descResultAffichage');" value="checked"/>
    je précise que ça marche pas pour autant (la checkbox)

    merci de votre aide !

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    il sort d'ou le "element" dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(element).style.visibility='hidden';
    ça ne devrait pas être "baliseId"???
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 84
    Points
    84
    Par défaut
    en effet ça peut aider mais j'ai un peu rien compris avec la manipulation des checkBox en javascript car on peut jouer avecles Id et les Name.

    Comment on fait pour tester quand la checkbox est checked et comment tester si c'est pas le cas?

    j'ai comme l'impressionque ça ne marche pas parce que cette fonction javascript ne marche pas du tout !

    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
     
    function displayOrHideColumn(idCheckBox, idBalise, idBaliseAffichage)
    		{
    			if (document.getElementById)
    				{
    					if(document.getElementById(idCheckBox) != null)
    					{
    						if(document.getElementById(idCheckBox).checked == true)
    						{
    							columnHide(idBalise,idBaliseAffichage);
    							idCheckBox.checked = false;
    						}
    						else if(document.getElementById(idCheckBox).checked == true)
    						{
    							columnDisplay(idBalise,idBaliseAffichage);
    							idCheckBox.checked = true;
    						}
    					}
    				}
    			}

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je ne sais pas si c'est utile ton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (document.getElementById)
    je te conseil d'alleger un peu ta fonction (moins de if) pour pouvoir la tester...

    tu laisse que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(document.getElementById(idCheckBox).checked)
    	{
    	alert("coche");
    } else {
    alert("pas coche");
    }
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 84
    Points
    84
    Par défaut
    ça avance ça avance mais ça bug pas mal

    le problème est que seule mes 2 premières lignes sont affectées par la suppression de colonnes

    c'est comme si la suppression agissait sur le code sans prendre en compte la balise <xsl:for-each>

    tu ne saurais pas si c'est possible de faire agir la suppression ou l'ajout d'une colonne pour TOUTES les lignes?


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 84
    Points
    84
    Par défaut
    j'ai l'impression que le problème vient de l'insertion et la suppression car avec ce code :
    -> premiere ligne du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <tr class="normal">
    			<td><p class="title">Règle de Gestion</p></td>
    		    <td style="border:dashed;" bgcolor="#FF0000" id="descResult"><p class="title">Description</p></td>
    		    <td id="docResult"><p class="title">Document</p></td>
    		    <td id="methodResult"><p class="title">Méthode</p></td>
    		    <td id="passedResult"><p class="title">Test Passed</p></td>
    		    <td id="inconclusiveResult"><p class="title">Test Inconclusive</p></td>
    		    <td id="failedResult"><p class="title">Test Failed</p></td>
    		</tr>
    -> javascript executé

    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
     
    /* permet de cacher une colonne si elle est affichée et inversement*/
    		function displayOrHideColumn(idCheckBox, idBalise, idBaliseAffichage)
    		{
    			if(document.getElementById(idCheckBox).checked)
    			{
    				columnDisplay(idBalise,idBaliseAffichage);
    				idCheckBox.checked = false;
    			}
    			else
    			{
    				columnHide(idBalise,idBaliseAffichage);
    				idCheckBox.checked = true;
    			}
    		}
     
    /* permet de cacher une colonne */
    		function columnHide(idBalise, idBaliseAffichage)
    		{			
    			cacheId(idBalise);
    			cacheId(idBaliseAffichage);
    		}
     
    function afficheId(baliseId)
    		{
    			if (document.getElementById)
    			{
    				if(document.getElementById(baliseId) != null)
    				{
    					document.getElementById(baliseId).style.display='block';
    					document.getElementById(baliseId).style.visibility='visible';
    				}
    			}
    		}
     
    		function cacheId(baliseId)
    		{
    			if (document.getElementById)
    			{
    				if(document.getElementById(baliseId) != null)
    				{
    					document.getElementById(baliseId).style.visibility='hidden';
    					document.getElementById(baliseId).style.display='none';
    				}
    			}
    		}
    le problème en images :



    Mon explication : lorsque je réaffiche la colonne, ça m'en rajoute 2 au lieu d'une dans chaque balise <td> mais je vois pas vraiment d'où ça vient

    Edit: en fait ça viendrait du CSS car lorsque je réaffiche la colonne je met un style.display = "block" ce qui me fait rajouter un <td> à l'intérieur de mon <td>. je pensais pallier avec un <div> à l'intérieur de mon <td> mais ça ne change pas grand chose.

Discussions similaires

  1. [XSLT] xsl:for-each + EXCEPT
    Par fcjunic dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/04/2010, 14h25
  2. [XSLT] Chemin très tarabiscoté dans un xsl:for-each
    Par strat0 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 14/09/2007, 16h40
  3. [XSLT] Croiser plusieurs xsl:for-each avec deux documents XML
    Par strat0 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 16h10
  4. [XSLT][débutant] Problème xsl:value-of dans xsl:for-each
    Par Choubie dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/05/2007, 16h30
  5. [XSLT] combiner xsl:for-each-group et tokenize() ?
    Par Goulu dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/12/2006, 15h54

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