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] utilisation de choose et when


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Par défaut [XSLT] utilisation de choose et when
    j'ai posté section Java, mais au final je me rend compte que j'ai surement un problème sur ma feuille XSL , du coup je me permet de remettre mon message ici.

    sinon Comment peut-on tester un feuille Xsl ?

    Bonjour tout le monde.

    Actuellement je reprends un travail qui utilise des feuilles Xsl pour modifier la structure de certain fichier xml.
    je passe par un code Java, avec des transformeurs qui appellent ces feuilles Xsl .
    Mon but est de rajouter certains paramètres, initialisé via le java, pour faire des traitements xsl différent suivant le cas.

    J'ai donc rajouté des params dans mes feuilles XSL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:param name="MemeZone256A"/>
    <xsl:param name="MemeZone256B"/>
    J'ai modifié le code suivant
    Code initial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:call-template name="zoneSpecifique">
       <xsl:with-param name="zone">256</xsl:with-param>
       <xsl:with-param name="sz">abc</xsl:with-param>
    </xsl:call-template>
    Nouveau code
    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
    <xsl:call-template name="zoneSpecifique">
      <xsl:with-param name="zone">256</xsl:with-param>
      <xsl:choose>
        <xsl:when test="$MemeZone256A='true'">
           <xsl:when test="$MemeZone256B='true'" >
                <xsl:with-param name="sz">c</xsl:with-param>
           </xsl:when>
           <xsl:otherwise>
               <xsl:with-param name="sz">bc</xsl:with-param>
           </xsl:otherwise>
       </xsl:when>
       <xsl:when test="$MemeZone256A='false'">
           <xsl:when test="$MemeZone256B='false'" >
               <xsl:with-param name="sz">abc</xsl:with-param>
           </xsl:when>
           <xsl:otherwise>
                <xsl:with-param name="sz">ac</xsl:with-param>
           </xsl:otherwise>
         </xsl:when>
      </xsl:choose>		
    </xsl:call-template>
    Et du côté Java
    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
    InputStream fXSLFile_o=getClass().getResourceAsStream("/xsl/IXM_isbd_o.xsl");
    StreamSource stylesheet_o = new StreamSource(fXSLFile_o);
    TransformerFactory tFactorOutil = TransformerFactory.newInstance();
    tFactory.setURIResolver(this);
    Transformer transformer_o = tFactorOutil.newTransformer(stylesheet_o);
    IxmIsbd.info("[tratiementpcl.java] : tfactory ixm_isbd_o.xsl OK");
     
    // Intialisation à false
    IxmIsbd.info("Début initia new var");
    try {
        transformer1.setParameter("MemeZone256A","false");
    }
    catch(Exception e)
    {
    IxmIsbd.error("transformer1.setParameter("+telTypeNotices);
    IxmIsbd.error("transformer1.setParameter("+e.getCause());
    IxmIsbd.error("transformer1.setParameter("+e.getMessage());
    IxmIsbd.error("transformer1.setParameter("+e.getLocalizedMessage());
    IxmIsbd.error("transformer1.setParameter("+e.getStackTrace());
    }
    avec le log associé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Début initia new var
    2010-10-26 17:22:35,922 [main] ERROR Transformation - transformer1.setParameter(cpl
    2010-10-26 17:22:35,922 [main] ERROR Transformation - transformer1.setParameter(null
    2010-10-26 17:22:35,922 [main] ERROR Transformation - transformer1.setParameter(null
    2010-10-26 17:22:35,922 [main] ERROR Transformation - transformer1.setParameter(null
    2010-10-26 17:22:35,922 [main] ERROR Transformation - transformer1.setParameter([Ljava.lang.StackTraceElement;@72167216
    Ce qui m'embête c'est que du côté java je n'ai pas d'erreurs avant de faire un setParameter()
    Cela veut dire que ma feuille Xsl est bien chargée.... ?

    Du coup est-ce mon nouveau code Xsl qui ne va pas ? Je ne suis pas habitué à débuggeur ce langages, je suis preneur de toute astuce

    merci de votre lecture.

    Pegaz

    En espérant qu'un oeil externe m'aide à avancé ...

    Pegaz

    [edit]
    J'ai essayer ce code en me disant qu'on ne pouvait pas faire de Choose dans un call template mais toujours rien...
    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
     
    <xsl:choose>
       <xsl:when test="$MemeZone256A='true'">
           <xsl:when test="$MemeZone256B='true'" >
    	   <xsl:call-template name="zoneSpecifique">
    	    <xsl:with-param name="sz">c</xsl:with-param>
    	    </xsl:call-template>
           </xsl:when>
           <xsl:otherwise>
               <xsl:call-template name="zoneSpecifique">
              <xsl:with-param name="sz">bc</xsl:with-param>
              </xsl:call-template>
    	</xsl:otherwise>
        </xsl:when>
        <xsl:when test="$MemeZone256A='false'">
            <xsl:when test="$MemeZone256B='false'" >
    	    <xsl:call-template name="zoneSpecifique">
    	    <xsl:with-param name="sz">abc</xsl:with-param>
    	     </xsl:call-template>
    	</xsl:when>
    	<xsl:otherwise>
    	    <xsl:call-template name="zoneSpecifique">
        	    <xsl:with-param name="sz">ac</xsl:with-param>
    	    </xsl:call-template>
    	</xsl:otherwise>
        </xsl:when>
    </xsl:choose>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par pegazuss5 Voir le message
    sinon Comment peut-on tester un feuille Xsl ?
    Par exemple avec http://www.shell-tools.net/index.php?op=xslt
    Mais il ne semble pas possible d'y fournir des paramètres.

    Citation Envoyé par pegazuss5 Voir le message
    J'ai essayer ce code en me disant qu'on ne pouvait pas faire de Choose dans un call template mais toujours rien...
    C'est exact, et d'ailleurs ton code de remplacement n'est pas valide non plus (on ne fait pas des when imbriqués, on peut faire des <choose><when><choose><when>...</when></choose></when></choose> mais pas des <choose><when><when>...</when></when></choose>.
    On peut aussi faire des <when test="truc and chose">.)

    Mais tout cela n'explique pas pourquoi il plante au setParameter(). Suivant les implémentations il devrait planter au newTransformer(Source) de préférence, ou au moins au transform(Source, Result)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 25
    Par défaut
    Je comprend pas pourquoi moi non plus, car effectivement une erreur aurait du se produire au chargement de la feuille .

    mais j'ai simplifié le code Xsl pour faire un test et cela marche (plus d'erreur le programme continue )

    Je vais donc tenter un
    <choose><when><choose><when>...</when></choose></when></choose>
    Merci de ton aide en tout cas.

Discussions similaires

  1. [XSLT] Utilisation de la fonction "When"
    Par Jean-Seba dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/11/2009, 15h51
  2. utilisation de xsl:if et xsl:choose xsl: when
    Par moh_yougo dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 30/01/2006, 15h16
  3. [xslt] Utilisation Xml-Image [Débutant]
    Par AlphonseBrown dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/11/2005, 14h49
  4. [XSLT] Utilisation variable template
    Par mihaestii dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 23/11/2005, 15h44
  5. [XSLT] Utilisation de XML avec PHP dans le cadre d'un site
    Par nicolas66 dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 06/11/2005, 22h39

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