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] ordre de traitement des apply-templates


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Invité
    Invité(e)
    Par défaut [XSL] ordre de traitement des apply-templates
    Bonjour à tous,
    je débute en xsl.
    Je m'aperçois que l'ordre dans lequel on spécifie les apply-templates est important.
    Ce qui signifie que pour ces apply-templates suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:apply-templates select="simpleNameValue" />
    <xsl:apply-templates select="tableDeplacement" />
    <xsl:apply-templates select="doubleNameValue" />
    et ce xml en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <simpleNameValue>tag 1</simpleNameValue>
    <doubleNameValue>tag 2</doubleNameValue>
    <tableDeplacement>tag 3</tableDeplacement>
    le xsl va traiter ces données dans l'ordre tag1, tag3, tag2.

    Or je voudrais que le traitement suive exactement l'ordre du xml et non celui du xsl.
    Est-ce possible ?
    Comment?

    Merci d'avance
    septentryon

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut
    tu peux faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates select="*" />
    * indique n'importe quel nom d'element,
    @* n'importe quel nom d'attribut.

  3. #3
    Invité
    Invité(e)
    Par défaut ...
    Ha ... ok
    mais je ne vois pas très bien dans quel context l'utiliser.
    Tu peux me faire un example ?
    je remplace tous les apply-template par cette ligne ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output method="html" encoding="ISO-8859-1"
        doctype-public="-//W3C//DTD HTML 4.01//EN"
        doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes"/>
     
      <xsl:template match="root">
        <html>
          <head>
            <title>Test XSLT : éléments à afficher dans l'ordre du fichier XML</title>
          </head>
          <body>
            <xsl:apply-templates select="*" />
          </body>
        </html>
      </xsl:template>
     
      <xsl:template match="simpleNameValue">
        [... description de la trasformation caractéristique aux simpleNameValue...]
      </xsl:template>
      <xsl:template match="tableDeplacement">
        [...]
      </xsl:template>
      <xsl:template match="doubleNameValue">
        [...]
      </xsl:template>
     
    </xsl:stylesheet>
    Voilà, c'est très simple.
    Dans le corps, tu indiques que pour chaque élément enfant de root, tu applique le template correspondant au nom de l'élément.

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

    le problème d'utiliser le caractère joker '*' est que tu n'as aucun contrôle sur les templates qui vont être appelés, ce qui inclut donc ceux de tous les éléments frères des 3 que tu as cités, éléments que tu ne souhaites peut-être pas traiter.

    Il est préférable d'utiliser l'opérateur union | qui te permet de sélectionner les éléments désirés, et qui respecte l'ordre du document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="simpleNameValue|doubleNameValue|tableDeplacement"/>

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour les infos, c'est exactement ce que je cherchais.
    a+
    Septentryon

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

Discussions similaires

  1. [CakePHP] Ordre de traitement des fonctions
    Par Bowen dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/10/2014, 15h00
  2. Réponses: 8
    Dernier message: 27/07/2010, 19h04
  3. Ordre de traitement des opérateurs sur un select
    Par tchoimars dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/05/2007, 18h42
  4. [D7]Ordre de traitement des commandes
    Par PBSDev dans le forum Langage
    Réponses: 1
    Dernier message: 06/02/2006, 15h05
  5. [xsl] alterner de style entre deux apply-template
    Par laouache dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/04/2004, 11h49

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