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 :

[Firefox]Erreur lors de la transformation XLST : (null)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut [Firefox]Erreur lors de la transformation XLST : (null)
    Bonjour tout le monde

    Je suis tout neuf dans l'utilisation de cette technologie, et je rencontre le probleme suivant:

    Je déclare une variable qui est égale à la valeur de l'element Category dans mon xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
              <xsl:value-of select="Category"/>
              <xsl:variable name="currentCat" select="Category"/>
    Puis, plus bas dans le xsl, je pose une condition sur cette variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
              <xsl:if test="Category=$currentCat">
    J'obtiens alors la résultat attendu sous IE, mais sous FireFox j'ai l'erreur:
    Erreur lors de la transformation XLST : (null)

    Apparemment due à la variable $currentCat dans le xsl:if

    Connaissez vous la syntaxe qui permettrait de faire fonctionner cela sur les 2 browser?

    Merci d'avance
    K.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Vraiment personne n'a d'idée sur ce probleme ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Les variables sont des élément de haut niveau, elles se déclarent sous la racine <xsl:stylesheet>. C’est peut-être ça.
    Et quel est l’intérêt de <xsl :value-of select= "Category "/> ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Merci pour ta réponse.

    En fait voici un extrait de mon 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
     
    <Version Num="next_version">
      <CL Change="22363">
        <Comment>
          <Category>bugfix</Category>
          <Product>unknown</Product>
          <Fixes>777 6666</Fixes>
          <Desc> machin</Desc>
        </Comment>
        <Comment>
          <Category>codeImprovement</Category>
          <Product>AFX</Product>
          <Product>AnimMorph</Product>
          <Product>AnimTools</Product>
          <Fixes>888</Fixes>
          <Desc> nouveau test</Desc>
        </Comment>
      </CL>
      <CL Change="22286">
        <Comment>
          <Category>crashfix</Category>
          <Product>General</Product>
          <Fixes>unknown</Fixes>
          <Desc> Correction</Desc>
        </Comment>
      </CL>
    Et donc je voudrais afficher le résultat classé par Category, puis par Product:
    Category
    --- Product
    ------ Change
    ------ Fixes
    ------ Desc

    C'est pour cela que je place cette variable à cet endroit car je veux sauvegarder la valeur de l'element Category pour m'en resservir plus loin dans un autre "filtre".
    Pour etre plus précis, voici mon XSL (épuré de tout ce qui concerne la mise en forme html):

    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:key name="cat" match="Version/CL/Comment" use="Category" />
    <xsl:key name="prod" match="Version/CL/Comment" use="Product" />
     
        <xsl:for-each select="CL/Comment[generate-id()=generate-id(key('cat',Category))]">
          <xsl:sort select="Category" />     
              <xsl:value-of select="Category"/>
              <xsl:variable name="currentCat" select="Category"/>    
     
              <xsl:for-each select="key('cat',Category)">
                  <xsl:for-each select="(.)[generate-id()=generate-id(key('prod',Product))]">  
                    <xsl:sort select="Product" />
                    <xsl:value-of select="Product"/>
                  </xsl:for-each>
                      <xsl:for-each select="key('prod',Product)">
                      <xsl:if test="Category=$currentCat">
                          <xsl:value-of select="(..)/@Change"/>
                          <xsl:value-of select="Fixes"/>
                          <xsl:value-of select="Desc"/>                    
                      </xsl:if>
                      </xsl:for-each>
              </xsl:for-each> 
          </xsl:for-each>
    Je trie donc d'abord par Category, puis pour chacune de ces Category, je classe par Product.
    Mais je suis super débutant là-dedans, donc y'a surement une facon plus "classe" de faire ca. Je prends tous les conseils

    Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Si je comprends bien ta variable est déclarée dans la boucle for-each ? c’est ça ?
    Si oui, le pbm vient peut-être de là.
    Il faut la déclarer plus haut, juste sous la racine.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Je veux bien, mais dans ce cas comment je dois faire pour stocker la valeur courante de l'element Category afin de pouvoir le réutiliser plus loin? En gros ma question est: est- il possible de changer la valeur d'une variable en cours de route?

    Parce que actuellement, je fais mon fore-each pour récupérer les elements Category, je stocke la valeur de la Category et je refais un for-each sur les elements Product en fonction de ma variable sauvegardée

    Merci beaucoup!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    J'ai peur qu'avec xslt les variables ne puissent pas être re-modifiées en cours de route. Elles sont déclarées au début et puis voilà.
    Il semble qu'elles soient l'équivalent d'une constante dans un langage plus évolué.
    Cela étant dit, je ne suis qu'un amateur débutant...
    Il faudrait donc l'avis d'autres personnes...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Merci quand meme

    Donc j'attends que quelqu'un de confirmé vienne donner son avis là-dessus... ce serait vraiment top

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Au fait, j'ai pas demandé que je suis.
    T'aurais pas Firefox 3 ? Non parce que j'ai le même pbm je crois...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Points : 36
    Points
    36
    Par défaut
    Nope... Firefox 2, désolé

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    En fait j'avais pas vu que sous IE ça marchait.

    Dans <xsl:stylsheet> il y a parfois l'attribut "type=..."
    La dedans on doit y mettre type="application/xml" mais IE n'accepte que sa propre cuisine M$ à savoir type="text/xsl"
    A creuser peut-être...

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/03/2012, 10h38
  2. Réponses: 1
    Dernier message: 01/06/2011, 14h12
  3. Réponses: 20
    Dernier message: 28/08/2008, 10h15
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

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