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

XML/XSL et SOAP Discussion :

XML et XSL, xsl:template et xsl:apply-templates


Sujet :

XML/XSL et SOAP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Points : 56
    Points
    56
    Par défaut XML et XSL, xsl:template et xsl:apply-templates
    Bonjour !

    Je me suis mis il y a peu à l'XSL, et j'ai du mal à comprendre le mécanisme créé à partir des deux balises xsl:template et xsl:apply-templates. Le petit exemple ci-dessous illustre un cas où je ne comprend pas le résultat :

    voici un bout de fichier xml assez simple :

    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
    <BOOK ISBN="9782212090819" LANG="fr" SUBJECT="applications">
    	<AUTHOR>
    		<FIRSTNAME>Jean-Christophe</FIRSTNAME>
    		<LASTNAME>Bernadac</LASTNAME>
    	</AUTHOR>
    	<AUTHOR>
    		<FIRSTNAME>François</FIRSTNAME>
    		<LASTNAME>Knab</LASTNAME>
    	</AUTHOR>
    	<TITLE>Construire une application XML</TITLE>
    	<PUBLISHER>
    		<NAME>Eyrolles</NAME>
    		<PLACE>Paris</PLACE>
    	</PUBLISHER>
    	<DATEPUB>1999</DATEPUB>
    </BOOK>
    <BOOK ISBN="9782212090529" LANG="fr" SUBJECT="général">
    ...
    la partie principale de mon XSL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="AUTHOR">
    	<famille><xsl:apply-templates select="LASTNAME"/></famille>
    </xsl:template>
    Donc dans mon esprit, mon xsl cherche les éléments dans l'xml "AUTHOR". Une fois trouvé, il garde en mémoire l'arbre qui découle de l'élément "AUTHOR". Ensuite, j'appel apply-templates sur les éléments "LASTNAME" et d'après ce que j'ai compris, il devrait alors renvoyer le contenu des éléments "LASTNAME". Or....j'ai ceci en résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <famille>Bernadac</famille>
    <famille>Knab</famille>Construire une application XMLEyrollesParis1999
    <famille>Michard</famille>XML, Langage et ApplicationsEyrollesParis1998
    ...
    Il me renvoie bien le contenu des éléments "LASTNAME" dans des balises "famille", mais il me rajoute après le reste de l'arbre ("Construire une application XMLEyrollesParis1999")...je ne comprend pas bien pourquoi...

    Merci pour votre aide =)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    C'est parce que, en XSLT, il existe deux règles invisibles, implicites, qui sont là même si tu ne les as pas demandées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="*">
      <xsl:apply-templates/>
    </xsl:template>
    "Pour tout élément sur lequel tu appliques les templates, applique les templates à tout ce qu'il contient"

    Elle ne s'applique que s'il n'y a pas une règle plus précise sur l'élément en question, comme match="AUTHOR", qui est plus précise puisqu'elle donne le nom de l'élément au lieu de *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="text()">
      <xsl:copy/>
    </xsl:template>
    "Pour tout contenu texte sur lequel tu appliques les templates, copie-le tel quel"

    Donc, déroulement du traitement :

    - balise <BOOK> : pas de règle pour celle-ci, donc règle implicite, on applique les templates à tout ce qu'elle contient.
    - on arrive à <AUTHOR> : il y a une règle pour lui, on l'applique.
    - on arrive à <LASTNAME> : pas de règle, donc règle implicite.
    - on arrive au texte 'Bernadac' : règle implicite, on le copie tel quel.
    - fini <LASTNAME>
    - fini <AUTHOR>
    - on arrive à <AUTHOR> suivant, même fonctionnement
    - on arrive à <TITLE> : pas de règle, donc règle implicite.
    - on arrive au texte 'Construire une application XML' : règle implicite, on le copie tel quel.
    - fini <TITLE>
    - on arrive à <PUBLISHER> : pas de règle, donc règle implicite.
    - etc, etc, etc.

    Donc, comment régler le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="BOOK">
      <xsl:apply-templates select="seulementCeQueTuVeuwTraiter"/>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Points : 56
    Points
    56
    Par défaut
    Raaa je n'aurai pas pu espérer meilleure réponse !
    Merci beaucoup thelvin =)

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

Discussions similaires

  1. [XSLT] xsl:sort + apply-templates
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 04/10/2007, 18h52
  2. [XSL] xsl:apply-templates pour les attribus
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/02/2006, 17h35
  3. [XSL] ordre de traitement des apply-templates
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 24/01/2006, 12h19
  4. [xsl] alterner de style entre deux apply-template
    Par laouache dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/04/2004, 12h49
  5. [XSL] Application d'un XSL pour produire un XSL... help
    Par Greedo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/05/2003, 12h30

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