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 :

Attribut select de la balise <apply-templates>


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : novembre 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Attribut select de la balise <apply-templates>
    Bonjour,

    Je découvre XSLT depuis peu et je ne comprends pas très bien ce qu'apporte l'attribut select de la balise apply-templates.

    Soit l'XML suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <foo>
         <bar>texte</bar>
    </foo>
    Si j'ai l'XSLT suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="bar">
         <h1><xsl:apply-templates/></h1>
    </xsl:template>
    est-ce la même chose que cet XSLT ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="foo">
         <h1>
              <xsl:apply-template select="bar>
         </h1>
    </xsl:template>
    Si le résultat est le même qu'est-ce qui justifie l'utilisation de l'un par rapport à l'autre?

    Merci pour vos réponses

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : novembre 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Personne pour m'éclairer ?

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 369
    Points : 2 413
    Points
    2 413
    Par défaut
    Je vais éssayer de faire un effort. Ce n'est pas évident au début c'est vrai.

    D'abord, il faut savoir tout moteur qui fait procès en conformité avec w3c xslt est écrit avec un ensemble de templates (3 ou 4 selon) dits defauts qui assure que si il n'y a pas un template qui matche explicitement noeuds et attributs, les templates défauts s'interviennent et donnent une chance de faire avancer les matches même récursivement chacun d'noeuds dans le sens technique de Modèle de Données de DOM de xml.

    [1] Pour les noeuds dit de texte et les attributs, le template défaut est comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="text()|@*">
        <xsl:value-of select="." />
    </xsl:template>
    [2] Pour les élément et la racine documentaire, il est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="*|/">
        <xsl:apply-templates />
    </xsl:template>
    et il assure que les matches vont faire avancer récursivement. Le cas sans l'attribut select serait interprété comme étant select="node()" qui est, d'ailleurs, explicitement dit select="*|text()|processing-instruction()|comment()". Attention : l'attribut n'est pas considéré comme un noeud d'enfant de l'élément en contexte dans le Modèle de Données d'après DOM.

    [3] Pour les processing-instruction() et comment(), il ne fait rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="processing-instruction()|comment()" />
    Ceci étant dit et j'ai fait dire très explicitement parce que ce n'est pas très facile à comprendre et c'est bien même souvent mal compris dans le détail.

    Dans le cas où vous écrivez un seul template et rien d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="foo">
        <h1>
            <xsl:apply-template select="bar">
        </h1>
    </xsl:template>
    L'élément foo va être matcher par les templates défauts et puis bar de suite. Or, l'élément bar n'a pas eu un template explicite pour lui. Par conséquent, les templates vont prendre la place et en deuxième étape va matcher le noeud de texte qui donne la sortie et puis le processus s'arrête.

    Dans le cas où vous écrivez un seul template et rien d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="bar">
    	<h1><xsl:apply-templates/></h1>
    </xsl:template>
    le raisonnement, une fois compris l'autre cas de par le mécanisme des templates défauts, est le même.

    Si le résultat est le même qu'est-ce qui justifie l'utilisation de l'un par rapport à l'autre?
    La raison est qu'ils donnent les voies de se faire élaborer différemment dans les cas où la structure et le résultat attendu soient plus compliqués.

    Voilà !

Discussions similaires

  1. L'attribut property de la balise <html:select
    Par Davesique dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/02/2011, 19h14
  2. [XSLT] Apply-templates avec select paramétré par un attribut
    Par datrinite dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/02/2010, 12h34
  3. [XSLT] apply-templates, select et attributs
    Par YvonSteel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/11/2008, 22h22
  4. [XPath] Apply-templates sur des balises de type pwet:test
    Par BiM dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/09/2006, 16h17
  5. Réponses: 4
    Dernier message: 18/11/2003, 17h08

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