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 :

Call-template et parcours [XSL-FO]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut Call-template et parcours
    Bonjour, je débute en XSL et XSL-FO et je bloque sur un truc avec un call-template. Ce qui ne va pas est en rouge.
    Je voudrais en fait afficher dans le header le nom du questionnaire.

    Je cherche aussi la facon de sauter une ligne.

    Merci d'avance!

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <?xml version="1.0" encoding="ISO-8859-15"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	<xsl:template match="/">
    		<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    					xmlns:fox="http://xml.apache.org/fop/extensions">
    			<fo:layout-master-set>
    				<fo:simple-page-master master-name="all"
    										page-height="29.7cm" 
    										page-width="21cm"
    										margin-top="1cm" 
    										margin-bottom="1cm" 
    										margin-left="2.5cm" 
    										margin-right="2.5cm">
    					<fo:region-body margin-top="1cm" margin-bottom="1cm"/>
    					<fo:region-before extent="3cm"/>
    					<fo:region-after extent="2.5cm"/>
    				</fo:simple-page-master>
    			</fo:layout-master-set>
    			
    			<fo:page-sequence master-reference="all">
    				<fo:static-content flow-name="xsl-region-before">
    					<xsl:call-template name="header"/>	
    				</fo:static-content> 
    				<fo:static-content flow-name="xsl-region-after">
    					<xsl:call-template name="footer"/>
    				</fo:static-content> 
    				<fo:flow flow-name="xsl-region-body">
    					<fo:block>
    						<xsl:call-template name="body"/>
    					</fo:block>
    				</fo:flow>
    			</fo:page-sequence>
    		</fo:root> 
    	</xsl:template>
    	
    	<xsl:template name="header">
    		<fo:block text-align="center" 
    					font-size="8pt" 
    					line-height="10pt"
    					border-bottom="#D1D7DC"
    					border-bottom-style="solid"
    					border-bottom-width="1pt"
    					padding-top="2pt"
    					padding-right="2pt"
    					padding-left="2pt"
    					padding-bottom="2pt">
    			<xsl:call-template name="questionnaire-header"/>
    		</fo:block>
    	</xsl:template>
    	
    	<xsl:template name="body">
    		<fo:block>
    			<xsl:apply-templates select="questionnaire"/>
    		</fo:block>
    		 <fo:block id="last-page"/>
    	</xsl:template>
    	
    	<xsl:template name="questionnaire-header" match="questionnaire">
    		<fo:block>
    			<xsl:value-of select="@name" />
    		</fo:block>
    	</xsl:template>
    	
    	<xsl:template match="questionnaire">
    		<fo:block font-size="24pt" text-align="center" font-weight="bold">
    			<xsl:value-of select="@name" />
    		</fo:block>
    		<fo:block>
    			<xsl:apply-templates select="theme"/>
    		</fo:block>
    	</xsl:template>
    	
    	<xsl:template match="theme">
    		<fo:block font-size="18pt">
    			T<xsl:value-of select="@number" />. <xsl:value-of select="@name" />
    		</fo:block>
    		<fo:block>
    			<xsl:apply-templates select="question"/>
    		</fo:block>
    		<fo:block/>
    	</xsl:template>
    	
    	<xsl:template match="question">
    		<fo:block font-size="12pt" text-indent="1em">
    			Q<xsl:value-of select="@number" />. <xsl:value-of select="@name" />
    		</fo:block>
    		<fo:block>
    			<xsl:apply-templates select="answer"/>
    		</fo:block>
    		<fo:block/>
    	</xsl:template>
    	
    	<xsl:template match="answer">
    		<fo:block text-indent="3em">
    			<xsl:value-of select="@name" />
    		</fo:block>
    	</xsl:template>
    	
    	<xsl:template name="footer">
    		<fo:block text-align="center" 
    					font-size="8pt" 
    					line-height="10pt"
    					border-top="#D1D7DC"
    					border-top-style="solid"
    					border-top-width="1pt"
    					padding-top="2pt"
    					padding-right="2pt"
    					padding-left="2pt"
    					padding-bottom="2pt">
    			<fo:block>
    				- <fo:page-number/> / <fo:page-number-citation ref-id="last-page"/> -
    			</fo:block>
    		</fo:block>
    	</xsl:template>
    </xsl:stylesheet>

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour Ynostel,

    l'élément template se définit soit avec l'attribut name soit avec l'attribut match, mais pas les deux à la fois.
    Etant donné que tu fait un appel de règle (élément call-template), il te suffit de nommer ta règle à l'aide de l'attribut name.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template name="questionnaire-header">...</xsl:template>
    Pour "sauter une ligne".

    En XSLT, on peut utiliser l'élément text tel quel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:text>
    </xsl:text>
    Eventuellement, tu peux remplacer le saut de ligne par l'entité caractère correspondante.

    En XSL-FO, on utilise l'élément block.

    Note : tu n'as pas besoin de déclarer l'espace de nom fo dans l'élément root puisque tu l'as déjà fait dans l'élément stylesheet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Merci pour la réponse ainsi que d'avoir corriger mes erreurs.
    Mais tu ne m'a pas dit comment récupérer la valeur d'un attribut lorsque l'on est dans un template de type "name".
    J'ai fini par trouver, je ne sais pas si c très "propre" mais ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:template name="questionnaire-header">
            <fo:block>
    	     <xsl:value-of select="questionnaire/@name" />
    	</fo:block>
    </xsl:template>

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je crois la révision a été bien faite.

    Mais, juste une parenthèse.

    Il est admissible de construire un template avec un nom et, en même temps, un attribut match. Mais, ça devient délicat de s'accorder le contexte quand le template est mis au travail dans son double rôle. Quand il prend le rôle de named-template, le contexte est celui qui vient de l'origine qui le fait appeller. Quand il prend le rôle d'un template normal, le contexte est celui qui est précisé dans l'attribut match. Ces deux cas peuvent facilement ne pas être le même . Dans le cas-ci, il ne le s'est pas, c'était le problème. Quand le template est appelé de xsl:template match="/", le contexte est évidemment "/". Or, il faut être "questionnaire". Le nouveau rendrement a donc bien corrigé le problème. C'est bien fait.

  5. #5
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Il est admissible de construire un template avec un nom et, en même temps, un attribut match.
    Oui, en effet, c'est noté dans la spécification. Mais alors en pratique, je ne me souvient pas l'avoir rencontrer.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2007, 10h19
  2. [XSLT] Call-template question de débutant
    Par ben23 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/07/2006, 00h20
  3. [XSL]Valeur d'un call-template en paramètre with-param
    Par camboui dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 20/03/2006, 14h45
  4. [XSLT] Différence entre apply-templates et call-template
    Par Cpt.FLAM dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/04/2005, 18h47
  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