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] probleme de resultat retourné par une variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut [XSLT] probleme de resultat retourné par une variable
    Bonsoir tous le monde

    Voici le fichier XML
    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
     
    <?xml version="1.0" encoding='ISO-8859-1'?>
    <?xml-stylesheet type="text/xsl" href="Devellopez.xsl"?>
    <LISTE-A><A>
    	<NUM>20-10</NUM>
    	<C>  		<ANI>non</ANI>	</C>
    	<S><SIT>
        			<DEP>Aaaa</DEP>
        			<COM>BB</COM>
      	</SIT>	</S>
    </A>
    <A>	<NUM>20-11</NUM>
    	<C>  		<ANI>oui</ANI>	</C>
    	<S><SIT>
        			<DEP>Abbb</DEP>
        			<COM>BB</COM>
      	</SIT>	</S>
    </A>
    <A>	<NUM>20-12</NUM>
    	<C>		<ANI>oui</ANI>	</C>
    	<S><SIT>
        			<DEP>Aaaa</DEP>
        			<COM>BB</COM>
      	</SIT>	</S>
    </A>
    </LISTE-A>
    le fichier XSL est le suivant
    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
    <?xml version="1.0" encoding="iso-8859-1" ?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    	<xsl:output method="html" media-type="text/html; charset=ISO-8859-1" version="4.0"/>
       
    <xsl:template match="/">
    	<html>
    	  <body>
    	    <table border="0" width="*" >
    		<tr><th>Nombre noeud</th>
    		    <th>Numero du A</th>
    		</tr>
    		<xsl:call-template name="doc">
    			<xsl:with-param name="requete" select="document('requete.xml')/requete"/>
    
    		</xsl:call-template>
    	     </table>
    	  </body>
    	</html>
        </xsl:template>
     <xsl:template name ="doc"  match="LISTE-A">
    	<xsl:param name="requete"/>
     	<xsl:for-each select="//A">
    	  <xsl:choose>
         	    <xsl:when test=".//DEP = $requete/DEP and .//ANI= $requete/ANI">
    	         <tr><td><xsl:variable name="num">
              		<xsl:number level="any" from="LISTE-A"/>
            		 </xsl:variable>
              		<xsl:value-of select="$num"/>	</td>
    			<td><font color="#FF8040">  <xsl:value-of select="NUMERO"/></font></td>
    		     	<td><font color="#FF8040"> dep</font></td>
    			<td><font color="blue">ani</font></td></tr>
    	    </xsl:when>
    	  </xsl:choose>
    	</xsl:for-each>
     </xsl:template></xsl:stylesheet>
    Je recoit le resultat CORRECT SUIVANT

    Nombre noeud Numero du A
    2 20-11 dep ani


    LE PROBLEME COMMENCE lorsque je change l'instruction <xsl:when test=".//DEP = $requete/DEP and .//ANI= $requete/ANI"> PAR une variable et je met cette instruction dans le fichier suivant test.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding='ISO-8859-1'?>
    <test1>
    <cle>.//DEP = $requete/DEP and .//ANI= $requete/ANI </cle>
    </test1>
    DANS ce cas je cahnge le fichier XSL par le code suivant
    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
    <?xml version="1.0" encoding="iso-8859-1" ?> 
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    	<xsl:output method="html" media-type="text/html; charset=ISO-8859-1" version="4.0"/>
       
    <xsl:template match="/">
    	<html>
    	  <body>
    	    <table border="0" width="*" >
    		<tr><th>Nombre noeud</th>
    		    <th>Numero du A</th>
    		</tr>
    		<xsl:call-template name="doc">
    			<xsl:with-param name="requete" select="document('requete.xml')/requete"/>
    			<xsl:with-param name="varReq1" select="document('test.xml')/test1/cle[1]"/>
    
    		</xsl:call-template>
    	     </table>
    	  </body>
    	</html>
        </xsl:template>
     <xsl:template name ="doc"  match="LISTE-A">
    	<xsl:param name="requete"/>
     	<xsl:param name="varReq1"/>
    	<xsl:value-of select="$varReq1"/>
     	<xsl:for-each select="//A">
    	  <xsl:choose>
         	    <xsl:when test="$varReq1">
    	         <tr><td><xsl:variable name="num">
              			<xsl:number level="any" from="LISTE-A"/>
            		 </xsl:variable>
              		<xsl:value-of select="$num"/>
         			</td>
    			<td><font color="#FF8040">  <xsl:value-of select="NUMERO"/></font></td>
    		     	<td><font color="#FF8040"> dep</font></td>
    			<td><font color="blue">ani</font></td></tr>
    	    </xsl:when>
    
    	  </xsl:choose>
    	</xsl:for-each>
    
     </xsl:template>
    
    </xsl:stylesheet>

    resultat Non ATTENDU

    Nombre noeud Numero du A
    1 20-10 dep ani
    2 20-11 dep ani
    3 20-12 dep ani

    ce que j’attend qu’il m’affiche le meme resultat que celle du precedent pourrier vous me dire pq ?
    MALGRE il affiche le contenu du fichier test.xml suite à l'instruction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$varReq1"/>


    Merci d'avance

  2. #2
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    d'apres le l'adresse suivante
    http://www.w3.org/TR/xslt20/#xsl-element
    je crois que je dois definir un type à mon variable varReq1
    càd au niveau de l'instruction
    <xsl:param name="varReq1" as="xs:boolean">

    mais boolean n'est pas correct car j'ai une expression complexe
    avez vous une idée sur ce sujet

    merci d'avance

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    est ce que l'expression suivante est concidéré comme XPATH expression
    .//Dep='aa' and .ani='oui'

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par coucouA
    est ce que l'expression suivante est concidéré comme XPATH expression
    .//Dep='aa' and .ani='oui'
    Non

    Qu'est ce que tu veux exprimer deja un test(xsl:if,xsl:when ...) ou une selection ?
    Et comment la traduirais tu en français ?

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    l'idée generale de mon probleme est la suivante que je l'exprine par deux algoritmes differents mais ont le même but
    et pour chaque algo j'associe le code XSL et je m'interesse plutot au second Algo

    j'ai le bloc suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (test= "a=b"){
    }

    cela corespont en xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:if  test= "a=b")>
    </xsl:if>
    j'ecrire le second l'algorithe qui a le meme but que le precedant
    en declarant une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var = 'a=b'
    if (test= var){
    }

    cela corespont en xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="var" select= "a=b"/>
    <xsl:if  test=$var)>
    </xsl:if>
    En utilisant ce deuxieme code XSL, le resultat ne s'affiche pas comme celui du premier code XSL.
    ce qui m'interesse c'est le second code

    merci d'avance

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    On ne peut pas "sauvegarder" un chemin xpath.

    Si tu enregistre ton chemin xapth dans un fichier xml cela devient une simple chaine de caractère et ne sera jamais plus evalué comme xpath.

Discussions similaires

  1. resultat erroné ramené par une requête
    Par sevy1881 dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/04/2010, 12h46
  2. Recuperer un resultat en passant par une classe
    Par lonyc dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2009, 11h45
  3. Probleme avec des logs générés par une application
    Par yayamo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2008, 14h41
  4. Réponses: 4
    Dernier message: 07/06/2007, 11h40
  5. Réponses: 3
    Dernier message: 11/12/2005, 11h15

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