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] recherche infos sur xsl:key


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] recherche infos sur xsl:key
    bonjour,
    je suis en train de lire de la doc sur xsl:key...mais j avoue ne pas très bien comprendre comment l utiliser ni même pourquoi...
    si quelqu un a qulques infos la dessus je l en remercie


    en particulier mettre en relief l intéret par rapport à un xsl:sort
    merci

  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
    Bonjour,

    c'est une fonction d'indexation intégrée à XSLT, utilisée de pair avec la fonction XPath key(). Le plus souvent, on indexe avec xsl:key des éléments par leur contenu ou plus généralement par un de leurs attributs, et key() renvoie la liste des noeuds correspondant à un critère de recherche passé en paramètre. On l'utilise quand on veut éviter des parcours de l'arbre XML trop complexes et trop fréquents.

    Par exemple, soit un XML décrivant un document quelconque :
    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
    <document>
      <section name="aaa" >
        <titre>Blah</titre>
        <section name="bbb">
          <titre>Blablah</titre>
          ...
        </section>
        <section name="ccc">
          <titre>Blablablah</titre>
          ...
        </section>
        ...
      </section>
      <section name="ddd">
        <titre>Blablablablah</titre>
        <paragraphe>Ce texte contient un lien vers la section ccc : <lien section-name="ccc"/></paragraphe>
      </section>
      ...
    </document>
    Et une feuille de style XSLT "naïve" qui opère une transformation XHTML, tranformant les éléments <lien> en éléments <a> contenant le titre de la section vers laquelle pointe le lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="section">
      <a name="{@name}">
          ...
      </a>
    </xsl:template>
    <xsl:template lien="lien">
      <a href="#{@section-name}">
         <xsl:value-of select="//section[@name = current()/@section-name]/titre"/>
      </a>
    </xsl:template>
    Le problème de l'expression dans le select du value-of est qu'elle parcourt tout l'arbre XML pour sélectionner les sections qui conviennent. Si tu as beaucoup de liens dans ton document, et qu'il est assez volumineux, cette méthode va être désastreuse en termes de performances. Il vaut mieux dans ce cas indexer les sections par leur nom, et les retrouver ultérieurement avec key() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:key name="noms-sections" match="section" use="@name"/>
    ...
    <xsl:template match="lien">
      <a href="#{@section-name}">
         <xsl:value-of select="key('noms-sections', @section-name)/titre"/>
      </a>
    </xsl:template>
    Le XML est parsé lors de l'exécution du xsl:key, et toutes les sections sont indéxées par leur nom en une seule fois. La fonction key() retrouve ensuite la bonne section immédiatement. Le gain de temps varie évidemment selon les cas, mais j'ai souvent constaté un facteur entre 20 et 30.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  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
    Merci grand father,
    comme d habitude, bien documenté et illustré!

  4. #4
    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
    Bon...
    j en ai lu des docs sur ce célèbre et non moins compliqué xsl:key...
    alors voila, je considère le xsl:key un peu comme un index en sql, or sur tous les exemples que j ai vu, les clefs se rapportent aux valeurs de champs spécifiés.....

    ma question est la suivante:
    peut on utiliser xsl:key sur le nom des token par exemple pour
    <el>valeur</el>
    faire une clef se rapportant à el et non pas sa valeur

    sinon je suppose que xsl:sort est valable mais bon...

  5. #5
    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
    Bien sûr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:key name="elements" match="el" use="name()"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    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
    ...merci

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

Discussions similaires

  1. Recherche infos sur jitterbit
    Par Nicolas281088 dans le forum Alimentation
    Réponses: 0
    Dernier message: 05/02/2009, 16h51
  2. Recherche info sur Enhydra Octopus
    Par Nicolas281088 dans le forum Alimentation
    Réponses: 0
    Dernier message: 05/02/2009, 16h02
  3. SQL2005 - Recherche info sur B A BA
    Par AdD92 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/03/2007, 15h07
  4. blocage pc si recherche info sur type de fichiers
    Par blandinais dans le forum Windows XP
    Réponses: 3
    Dernier message: 04/12/2006, 16h10
  5. [Vba]recherche infos sur tables
    Par Emcy dans le forum Access
    Réponses: 8
    Dernier message: 09/11/2005, 08h44

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