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 :

[XSL] @mode, il semble que le prédicat ne soit pas respecté


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [XSL] @mode, il semble que le prédicat ne soit pas respecté
    re bonjour (c est ma journée aujourd hui...)
    j ai écris quelque chose comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:attribute name="text">
      <xsl:apply-templates select="node()" mode="text"/>
    </xsl:attribute>
    cet attribut me sert à récupérer le text de certains sous éléments pour une comparaison ultérieure

    voici les templates correspondants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="x:em | x:strong" mode="text">
      <xsl:apply-templates select="node()" mode="text"/>
    </xsl:template>
    <xsl:template match="text()" mode="text">
      <xsl:value-of select="."/>
    </xsl:template>
    l idée est d avoir dans mon attribut text les text() de mon élément courant et ceux des enfants em et strong...
    or il semble que mon template match avec tout ce qui passe.
    En résumé mon
    xsl:template match="x:em | x:strong"
    est équivalent à
    xsl:template match="*"
    et là cela m ennuis..
    j ai bien sûr corrigé l erreur en changeant le select du apply-templates mais cela reste ennuyeux...

    quelqu un aurait une explication?

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut Re: [XSL] @mode, il semble que le prédicat ne soit pas respe
    Citation Envoyé par tiscars
    or il semble que mon template match avec tout ce qui passe.
    Non, ce n'est pas ton template qui "matche" tout, c'est qu'il n'existe pas de template pour intercepter les cas que tu ne veux pas traiter. Ainsi, en présence d'un élément x:italic par exemple, le processeur XSLT ne va pas trouver de template qui le "matche" (en mode "text"), il va donc activer les templates par défaut (on a tendance à les oublier ceux-là). Or, ces templates par défaut se contentent de parcourir les éléments et d'envoyer en sortie les noeuds textuels.

    Il suffit d'ajouter un template vide qui intercepte les cas que tu ne veux pas traiter, et qui va être prioritaire sur le template par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="x:*" mode="text" />

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    certes... j y pensais plus à ces termplates par défaut
    merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2010, 02h28
  2. Réponses: 15
    Dernier message: 15/12/2008, 17h29
  3. Réponses: 2
    Dernier message: 01/10/2007, 09h06
  4. option pour que la maximisation ne soit pas general
    Par benoit_iund dans le forum IHM
    Réponses: 2
    Dernier message: 25/05/2007, 20h08
  5. [XSL] Test sur un xsl-if qui semble ignoré
    Par Shadow aok dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/04/2006, 18h23

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