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 averti
    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
    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 : 49
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : Administration - Collectivit� locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    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
    Quelques soient tes donn�es

  3. #3
    Membre averti
    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
    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