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][Débutant]Eléments pas pris en compte


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Points : 288
    Points
    288
    Par défaut [XSLT][Débutant]Eléments pas pris en compte
    Bonjour,
    Je débute en xslt, et j'ai un léger souci, certains éléments ne sont pas pris en compte lors de la transformation, exemple :

    Voici mon fichier source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    ...
      <body>
        <p>
          <div class="class1"></div>
        </p>
        <div class="class2">
          <p>
            <div class="class1"></div>
          </p>
        </div>
      </body>
    </html>
    Le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <root>
      <class1 path="/html/body/*/div[@class="class1"]"/>
      <class2 path="/html/body/div[@class="class2"]">
        <class3 path="/html/body/div[@class="class2"]/*/div[@class="class3"]"/>
      </class2>
    </root>
    Le résultat effectif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <root>
      <!-- manque la class1-->
      <class2 path="/html/body/div[@class="class2"]">
        <class3 path="/html/body/div[@class="class2"]/*/div[@class="class3"]"/>
      </class2>
    </root>
    On constate, que l'élément P à la racine du BODY n'a pas été traitée, pourtant une même balise P à l'intérieur d'un élément DIV avec un attribut class(donc qui nous interesse) à été pris en compte plus bas.

    Mon fichier de transformation XSLT
    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
    <xsl:template match="/*">
      <xsl:apply-templates select="html:body"/>
    </xsl:template>
     
     
    <xsl:template match="html:body">
      <root>
        <xsl:call-template name="treat_element">
          <xsl:with-param name="path">/html/body</xsl:with-param>
        </xsl:call-template>
      </root>
    </xsl:template>
     
    <xsl:template name="treat_element">
      <xsl:param name="path"/>
      <xsl:choose>
        <xsl:when test="html:*[@class]">
          <xsl:apply-templates select="html:*[@class]">
            <xsl:with-param name="path" select="$path"/>
          </xsl:apply-templates>
        </xsl:when>
        <xsl:otherwise>
          <xsl:apply-templates select="*">
            <xsl:with-param name="path" select="$path"/>
          </xsl:apply-templates>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
     
    <xsl:template match="*">
      <xsl:param name="path"/>
      <xsl:call-template name="treat_element">
        <xsl:with-param name="path"><xsl:value-of select="$path"/>/*</xsl:with-param>
      </xsl:call-template>
    </xsl:template>
     
    <xsl:template match="html:*[@class]">
     ...
    </xsl:template>
    Je ne saisis pas où j'ai commis une erreur. Une idée de quoi cela provient ?
    Merci de votre aide.
    P.S.
    J'imagine bien que mon code n'est pas très propre, désolé... je débute....

  2. #2
    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 : 48
    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
    je ne pense pas que l'erreur viens de la mais déjà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="path">/html/body</xsl:with-param>
    pas bon

    si c'est un xpath qu'il faut evaluer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="path" select="/html/body"></xsl:with-param>
    si c'est une chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="path" select="'/html/body'"></xsl:with-param>

  3. #3
    Membre actif Avatar de aDamas
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 260
    Points : 288
    Points
    288
    Par défaut
    C'est une chaîne, donc j'ai modifié ça, mais ça ne change rien au problème...
    En fait ce path ne me sert à rien dans la transformation vers mon fichier de sortie. (j'en aurai besoin plus tard, dans un autre context, lors d'un parsing, mais ça n'a rien à voir)

Discussions similaires

  1. getline(cin,s) pas pris en compte ?
    Par FinalSpirit dans le forum SL & STL
    Réponses: 3
    Dernier message: 19/01/2006, 01h18
  2. [Mail] Les sauts de lignes pas pris en compte
    Par Anduriel dans le forum Langage
    Réponses: 15
    Dernier message: 14/12/2005, 19h13
  3. [Plugi][phpeclipse] point d'arrêt pas pris en compte
    Par damjal dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 22/11/2005, 23h58
  4. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

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