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] Différence entre apply-templates et call-template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 19
    Points : 18
    Points
    18
    Par défaut [XSLT] Différence entre apply-templates et call-template
    Bonjour,

    j'aurais cru que la question avait déjà été posée 100 fois mais j'ai rien trouvé d'intéressant, désolé par avance si j'ai loupé quelquechose.

    Bref je me demandais la différence entre les xsl:call-template et xs:apply-templates, quand et pourquoi utiliser l'un ou l'autre, les optimisations à faire, etc.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <!-- Appel du template -->
    <xsl:for-each select="//UML:Class[@xmi.id]">
      <xsl:call-template name="Classe"/>
    </xsl:for-each>
     
    <!-- Définition du template -->
    <xsl:template name="Classe">
       ....
    </xsl:template>
    Quelle est la différence avec ceci, qui retourne le même résultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <!-- Appel du template -->
    <xsl:apply-templates select="//UML:Class[@xmi.id]" />
     
    <!-- Définition du template -->
    <xsl:template match="UML:Class[@xmi.id]">
      ....
    </xsl:template>

    D'avance, merci pour vos réponses.

  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 : 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
    L'apply template s'effectue sur une donnée du XML.
    Si il n'existe pas de noeuds concernant des templates il n'executera rien.

    Le call-template s'execute toujours c'est une "fonction" à laquelle on peu fixer des paramètre

    exemple

    mon xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
     
    <racine>
    <texte>bonjour le monde !!!</texte>
    </racine>
    avec ce xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:template match="/">
    		<xsl:apply-templates select="//texte">
    	</xsl:apply-templates>
    	</xsl:template>
    	<xsl:template match="texte">
    		<xsl:value-of select="."/>
    	</xsl:template>
    </xsl:stylesheet>
    affichera
    alors que ce xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:template match="/">
    		<xsl:apply-templates select="//autre">
    	</xsl:apply-templates>
    	</xsl:template>
    	<xsl:template match="texte">
    		<xsl:value-of select="."/>
    	</xsl:template>
    </xsl:stylesheet>
    N'affichera rien vu qu'il n'y a pas de noeud autre

    Si je voulais afficher un message independamment des données; je pourrais utiliser un call-template

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:template match="/">
    		<xsl:call-template name="afficher"/>
    	</xsl:template>
    	<xsl:template name="afficher">
    bonjour tout le monde !!!!
    	</xsl:template>
    </xsl:stylesheet>
    qui affichera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bonjour tout le monde !!!!
    Quelques soient tes données

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    Merci pour la réponse.
    C'est vrai que je n'avais pas perçu le call-template comme une "fonction" qui n'est pas rattachée à un noeud du document, et on peut parfois se demander pourquoi utiliser l'un ou l'autre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Différences entre xalan et saxon
    Par hzhang2 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/04/2009, 12h27
  2. [XSLT] Différence entre match="node()" et match="/"
    Par jeanbabi dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/05/2008, 17h44
  3. Réponses: 1
    Dernier message: 15/05/2007, 10h19
  4. [XSLT] Problème avec apply-templates
    Par NeoMan dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/12/2005, 14h45
  5. différence call-template et apply-templates
    Par mousstik dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/11/2004, 12h28

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