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 test si l'élément a l'attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut XSL test si l'élément a l'attribut
    Bonjour, j'ai un jeu de fichiers xml contenant des éléments topic et 1 seul fichier qui contien un topic avec un attribut produit="OPTION".

    Je voudrais écrire OPTION dans le header du fichier contenant l'attribut produit="OPTION" et TOTO sur les autres headers.

    Actuellement le résultat du test suivant écrit OPTIOn sur tous mes headers et pas uniquement sur celui qui a l'attribut comme si il faisait un test au moins un élément contient. Une idée SVP? Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:choose>
            <xsl:when test="topic/@produit='OPTION'">
                     <fo:inline xsl:use-attribute-sets="title__option">
                                <xsl:text>OPTION</xsl:text>
                   </fo:inline>
              </xsl:when>
              <xsl:otherwise>
                     TOTO
               </xsl:otherwise>
    </xsl:choose>

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    le problème est dans le code que tu as choisi de ne pas montrer. Comme toujours.

    C'est pour ça qu'il faut toujours montrer tout le code, en fait. On peut raisonnablement se demander qu'est-ce qui peut faire croire à quelqu'un que c'est une bonne idée de cacher des choses quand on demande de l'aide.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Hello arf ok utilisant dita opentoolkit il y a beacoup de code que j'ai choisit de ne pas montrer pour aller à l'essentiel mais en gros ça donne

    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
     
    <xsl:template name="insertBodyEvenHeader">
        <xsl:param as="xs:string" name="flow-name" select="'even-body-header'" />
        <fo:static-content flow-name="{$flow-name}">
          <fo:block xsl:use-attribute-sets="__body__even__header">
    		Chapitre <fo:retrieve-marker retrieve-class-name="current-header" />
    		<xsl:text>*</xsl:text>
    		<xsl:choose>
                           <xsl:when test="topic/@produit='OPTION'">
                                <fo:inline xsl:use-attribute-sets="title__option">
                                     <xsl:text>OPTION</xsl:text>
                               </fo:inline>
                           </xsl:when>
                           <xsl:otherwise>
                                 TOTO
                          </xsl:otherwise>
                       </xsl:choose>
     
     
          </fo:block> 
        </fo:static-content>
      </xsl:template>
    Merci

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Non mais il y a pas de "en gros".

    J'ai dit tout le code. Et je ne devrais même pas avoir besoin de le dire.

    Et s'il y a beaucoup de code, eh bien, enlèves-en. On est pas en train d'écrire ton programme, on est en train de voir comment résoudre ton problème. Le reste de ton programme est donc sans intérêt.
    Alors tu fais un autre programme, extrêmement court. Et qui a le problème que tu essaies de résoudre. Et normalement rien d'autre que ça.

    Ensuite, tu nous montres le programme en question, le XML d'entrée, le résultat, et le résultat que tu aurais voulu avoir à la place.

    Euh... C'est de l'informatique. Tu es face à un problème que tu as tellement de mal à résoudre que tu es train de demander de l'aide. Tout ce que je dis au-dessus, tu étais censé le faire pendant que tu essayais de résoudre ton problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Effectivement 1 l'accueil est chaleureux 2 si je demande c'est que je ne suis pas expert 3 dita opentoolkit c'est des dizaines de feuilles xsl imbriquées


    Après remastering

    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
     
    <xsl:template name="insertBodyStaticContents">
            <xsl:call-template name="insertBodyFootnoteSeparator"/>
            <xsl:call-template name="insertBodyOddFooter"/>
            <xsl:if test="$mirror-page-margins">
              <xsl:call-template name="insertBodyEvenFooter"/>
     
            </xsl:if>
     
    		<xsl:choose>
    			<xsl:when test="*[contains(@product,'OPTION')]">
    				<xsl:call-template name="OddHeaderOPTION"/>
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:call-template name="insertBodyOddHeader"/>
    			</xsl:otherwise>
    		</xsl:choose>
     
            <xsl:if test="$mirror-page-margins">
              <xsl:call-template name="insertBodyEvenHeader"/>
            </xsl:if>
            <xsl:call-template name="insertBodyFirstHeader"/>
            <xsl:call-template name="insertBodyFirstFooter"/>
            <xsl:call-template name="insertBodyLastHeader"/>
            <xsl:call-template name="insertBodyLastFooter"/>
        </xsl:template>
     
     
     
     
     
     
     
    <xsl:template name="insertBodyOddHeader">
        <xsl:param as="xs:string" name="flow-name" select="'odd-body-header'" />
        <fo:static-content flow-name="{$flow-name}">
          <fo:block xsl:use-attribute-sets="__body__odd__header">
    			Chapitre <fo:retrieve-marker retrieve-class-name="current-header" />
    			<xsl:text>*</xsl:text>			
          </fo:block>
     
        </fo:static-content>
      </xsl:template>
     
     
      <xsl:template name="OddHeaderOPTION">
        <xsl:param as="xs:string" name="flow-name" select="'odd-body-header'" />
        <fo:static-content flow-name="{$flow-name}">
    		<fo:block xsl:use-attribute-sets="__body__odd__header">
    			Chapitre <fo:retrieve-marker retrieve-class-name="current-header" />
    			<xsl:text>*</xsl:text>
    			<fo:inline xsl:use-attribute-sets="title__option">
    				<xsl:text>OPTION</xsl:text>
    			</fo:inline>
    		</fo:block>
        </fo:static-content>	
      </xsl:template>

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    1. C'est bien mignon de se plaindre de l'accueil, mais en même temps quand les gens te disent qu'il faut montrer tout le code et que tu montres autre chose que tout le code, il faut te faire à l'idée qu'ils vont se rendre compte que tu fais autre chose que ce que les gens qui essaient de t'aider te disent de faire.

    Et en général, ça ne plaît pas beaucoup. Parce que si on te dit de faire un truc, c'est parce qu'on est au courant qu'il le faut. Tu n'es pas vraiment censé le remettre en question.

    A la limite tu demanderais comment faire au lieu de décider qu'on se contentera des miettes que tu ajoutes, bon, on va dire qu'on peut toujours faire une leçon d'informatique de base.

    2. Expert ou pas, si tu essaies de travailler avec XSLT, tu es au minimum un peu à l'aise avec les ordinateurs, donc tu sais comment on étudie un problème et tu sais que les gens ne peuvent pas lire dans tes pensées. Pourtant dans tes messages, tout porte à croire le contraire.

    3. Je t'ai déjà dit ce qu'il faut faire quand il y a beaucoup de code. "Dita opentoolkit" ou pas "dita opentoolkit", ça ne change rien. La méthode reste la même.

    4. Du coup, c'est quoi le code remastérisé, là ? Ça fait ce que tu voulais que ça fasse ? Ça ne devrait pourtant rien changer, à vue de nez, mais bon, le reste du code peut y être pour quelque chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce qu'il faut montrer, à mon sens, est aussi le(s) template(s) où document(...) sont invoqués. Avec ça, je peux vous donner des idées comment faire.

  8. #8
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Hello, maintant j'utilise des "markers" mais mon test if retourne toujours toutes les pages ou aucune mais pas juste celle qui contient l'attribut product=OPTION". Merci d'avance

    retrieve marker

    <xsl:template name="insertBodyEvenHeader">
    <xsl:param as="xs:string" name="flow-name" select="'even-body-header'" />
    <fo:static-content flow-name="{$flow-name}">
    <fo:block xsl:use-attribute-sets="__body__even__header">
    Chapitre <fo:retrieve-marker retrieve-class-name="current-header" />
    <xsl:text>&#160;</xsl:text>
    <fo:retrieve-marker retrieve-class-name="OPTION" />
    </fo:block>
    </fo:static-content>
    </xsl:template>


    marker insertion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="*" mode="insertTopicHeaderMarker">
        <xsl:param name="marker-class-name" as="xs:string">current-header</xsl:param>
        <fo:marker marker-class-name="{$marker-class-name}">
          <xsl:apply-templates select="." mode="insertTopicHeaderMarkerContents"/>
    	  <xsl:if test="*[contains(@product, 'OPTION')]">
    		<fo:marker marker-class-name="OPTION">
    			<fo:inline xsl:use-attribute-sets="title__option">
    				<xsl:text>OPTION*</xsl:text>
    			</fo:inline>	
    		</fo:marker>
    	  </xsl:if>
        </fo:marker>
      </xsl:template>

  9. #9
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Oui, mais je ne vois toujours pas le(s) template(s) où intervient la fonction document(...). Si on veut faire quelque chose pour résoudre le blocage demandé, il faut faire quelque chose au commencement des commencements. Arriver aux templates dits, c'est déjà trop tard pour y remédier.

  10. #10
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Hello ok je vais esayer de remonter mais pas simple de voir la stucture découpée en xsl imbriqués dans un plugin qui overident partiellement les xsl d'un autre plugin...

    au dessus j'ai le process de génération du topic

    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
    <xsl:template match="*" mode="commonTopicProcessing">
          <xsl:if test="empty(ancestor::*[contains(@class, ' topic/topic ')])">
            <fo:marker marker-class-name="current-topic-number">
              <xsl:variable name="topicref" select="key('map-id', ancestor-or-self::*[contains(@class, ' topic/topic ')][1]/@id)"/>
              <xsl:for-each select="$topicref">
                <xsl:apply-templates select="." mode="topicTitleNumber"/>
              </xsl:for-each>
            </fo:marker>
          </xsl:if>
     
    	<xsl:apply-templates select="*[contains(@class, ' topic/title ')]"/>
    	<xsl:apply-templates select="*[contains(@class, ' topic/prolog ')]"/>
            <xsl:apply-templates select="*[not(contains(@class, ' topic/title ')) and
                                           not(contains(@class, ' topic/prolog ')) and
                                           not(contains(@class, ' topic/topic '))]"/>
     
            <xsl:apply-templates select="*[contains(@class,' topic/topic ')]"/>
            <xsl:apply-templates select="." mode="topicEpilog"/>
        </xsl:template>

    et un layout pour générer les pages
    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
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format"
        version="2.0">
     
        <xsl:template name="createLayoutMasters">
          <xsl:call-template name="createDefaultLayoutMasters"/>
        </xsl:template>
     
        <xsl:template name="createDefaultLayoutMasters">
            <fo:layout-master-set>
              <xsl:apply-templates select="." mode="create-page-masters"/>
              <xsl:apply-templates select="." mode="create-page-sequences"/> 
            </fo:layout-master-set>
        </xsl:template>
     
    	 <xsl:template match="/" mode="create-page-masters">
    	...
    		<fo:simple-page-master master-name="body-first" xsl:use-attribute-sets="simple-page-master">
    			  <fo:region-body xsl:use-attribute-sets="region-body.odd"/>
    			  <fo:region-before region-name="first-body-header" xsl:use-attribute-sets="region-before"/>
    			  <fo:region-after region-name="first-body-footer" xsl:use-attribute-sets="region-after"/>
    			</fo:simple-page-master>
     
    			<xsl:if test="$mirror-page-margins">
    			  <fo:simple-page-master master-name="body-even" xsl:use-attribute-sets="simple-page-master">
    				<fo:region-body xsl:use-attribute-sets="region-body.even"/>
    				<fo:region-before region-name="even-body-header" xsl:use-attribute-sets="region-before"/>
    				<fo:region-after region-name="even-body-footer" xsl:use-attribute-sets="region-after"/>
    			  </fo:simple-page-master>
    			</xsl:if>
     
    			<fo:simple-page-master master-name="body-odd" xsl:use-attribute-sets="simple-page-master">
    			  <fo:region-body xsl:use-attribute-sets="region-body.odd"/>
    			  <fo:region-before region-name="odd-body-header" xsl:use-attribute-sets="region-before"/>
    			  <fo:region-after region-name="odd-body-footer" xsl:use-attribute-sets="region-after"/>
    			</fo:simple-page-master>
     
    			<fo:simple-page-master master-name="body-last" xsl:use-attribute-sets="simple-page-master">
    			  <fo:region-body xsl:use-attribute-sets="region-body.even"/>
    			  <fo:region-before region-name="last-body-header" xsl:use-attribute-sets="region-before"/>
    			  <fo:region-after region-name="last-body-footer" xsl:use-attribute-sets="region-after"/>
    			</fo:simple-page-master>
    		...	
    	</xsl:template>
     
      <xsl:template match="/" mode="create-page-sequences">
       ... 
        <xsl:call-template name="generate-page-sequence-master">
          <xsl:with-param name="master-name" select="'body-sequence'"/>
          <xsl:with-param name="master-reference" select="'body'"/>
        </xsl:call-template>
        <xsl:call-template name="generate-page-sequence-master">
          <xsl:with-param name="master-name" select="'ditamap-body-sequence'"/>
          <xsl:with-param name="master-reference" select="'body'"/>
          <xsl:with-param name="first" select="false()"/>
          <xsl:with-param name="last" select="false()"/>
        </xsl:call-template>
        ...
    	</xsl:template>
     
     
     
     
     <!-- Generate a page sequence master -->
      <xsl:template name="generate-page-sequence-master">
        <xsl:param name="master-name"/>
        <xsl:param name="master-reference"/>
        <xsl:param name="first" select="true()"/>
        <xsl:param name="last" select="true()"/>
        <fo:page-sequence-master master-name="{$master-name}">
     
    	<!--<fo:single-page-master-reference master-reference="front-matter-first"/>-->
    	<!-- <fo:single-page-master-reference master-reference="cover2-first"/>-->
     
    		<fo:repeatable-page-master-alternatives>
    			<xsl:choose>
    				<xsl:when test="$mirror-page-margins">
    					<fo:conditional-page-master-reference master-reference="{$master-reference}-odd"
    														  odd-or-even="odd"/>
    					<fo:conditional-page-master-reference master-reference="{$master-reference}-even"
    														  odd-or-even="even"/>
    				</xsl:when>
    				<xsl:otherwise>
    					<fo:conditional-page-master-reference master-reference="{$master-reference}-odd"/>
    				</xsl:otherwise>
    			</xsl:choose>
    		</fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
      </xsl:template>

    et un root.processing du document

    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
     <xsl:template match="/" name="rootTemplate">
            <xsl:call-template name="validateTopicRefs"/>
            <fo:root xsl:use-attribute-sets="__fo__root">
                <xsl:call-template name="createMetadata"/>
                <xsl:call-template name="createLayoutMasters"/>
                <xsl:call-template name="createBookmarks"/>
                <xsl:apply-templates select="*" mode="generatePageSequences"/>
            </fo:root>
        </xsl:template>
     
      <xsl:variable name="map-based-page-sequence-generation" select="true()" as="xs:boolean"/>
     
      <xsl:template match="*[contains(@class, ' topic/topic ')]" mode="generatePageSequences">
        <fo:page-sequence master-reference="ditamap-body-sequence" xsl:use-attribute-sets="page-sequence.body">
          <xsl:call-template name="startPageNumbering"/>
          <xsl:call-template name="insertBodyStaticContents"/>
          <fo:flow flow-name="xsl-region-body">
            <xsl:apply-templates select="." mode="processTopic"/>
          </fo:flow>
        </fo:page-sequence>
      </xsl:template>

  11. #11
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne vois toujours pas de templates où faisant charger des fichiers multiples de xml pour ramasser des données... OK, c'est peut-être un mal-entendu de ma part et que l'application fait charger un par un xml indépendamment pour créer un xsl-fo document intermédiaire puis un pdf tout aussi indépendamment. Sinon, dites-le.

    Dans ce cas-ci, vous pouvez toujours construire un paramètre global qui caractérise la structure particulière.

    [1] Si le caractère ne se manifeste nul-part dans le fichier, ce paramètre ne peut se préciser que pas un input direct de l'application qui fait appeler la transformation... Par exemple, une construction de paramètre bFaire comme ça :
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:fo="http://www.w3.org/1999/XSL/Format"
            version="2.0">
     
            <!-- soit 0, soit 1, défaut 0 -->
            <xsl:param name="bFaire" select="0" />
     
            <xsl:template name="createLayoutMasters">
              <xsl:call-template name="createDefaultLayoutMasters"/>
            </xsl:template>
            <!-- etc etc... -->

    [1.1] Et puis quand on appel la transformation, selon le nom du fichier xml, on fournit la paramètre au niveau de l'application, soit 1 : qu'il faut faire le OPTION etc, soit 0 : qu'il faut faire le TOTO seulement etc...

    [1.2] Et le code fonctionel s'écrit comme ça.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                        <xsl:choose>
                            <xsl:when test="topic/@product='OPTION2' and $bFaire=1">
                                <fo:inline xsl:use-attribute-sets="title__option">
                                    <xsl:text>OPTION</xsl:text>
                                </fo:inline>
                            </xsl:when>
                            <xsl:otherwise>
                                TOTO
                            </xsl:otherwise>
                        </xsl:choose>

    [2] Mais si le caractère pourrait se déterminer intransèquement, c'est-à-dire, par les données elles-mêmes dedans le fichier xml. Prenons un exemple, un attribut b dans la racine qui prend une valeur soit 'yes', soit 'no'. On peut dans ces cas déterminer le paramètre intransèquement sans faire appel à l'application pour le fournir cas par cas. On modifie la construction [1] comme ça.
    Code xslt : 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
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:fo="http://www.w3.org/1999/XSL/Format"
            version="2.0">
     
            <!-- soit 0, soit 1, défaut 0 -->
            <xsl:param name="bFaire">
                <xsl:choose>
                    <xsl:when test="/root/@b='yes'">
                        <xsl:value-of select="1" />
                    <xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="0" />
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:param>
     
            <xsl:template name="createLayoutMasters">
              <xsl:call-template name="createDefaultLayoutMasters"/>
            </xsl:template>
            <!-- etc etc... -->

    Et puis on épargne l'étape [1.1] et on fait la même chose comme l'étape [1.2] aussi.

    Voilà !

  12. #12
    Candidat au Club
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Octobre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci tsujji en fait avec les markers j'ai une petite avancée en modifiant mon topic processing

    le test fonctionne jusqu'à l'élément critère du test inclus mais continue de s'appliquer après avoir rencontré le critère... j'essaye donc maintenant de stopper le critère au seul élément

    <xsl:template match="*" mode="commonTopicProcessing">
    <xsl:if test="empty(ancestor::*[contains(@class, ' topic/topic ')])">
    <fo:marker marker-class-name="current-topic-number">
    <xsl:variable name="topicref" select="key('map-id', ancestor-or-self::*[contains(@class, ' topic/topic ')][1]/@id)"/>
    <xsl:for-each select="$topicref">
    <xsl:apply-templates select="." mode="topicTitleNumber"/>
    </xsl:for-each>
    </fo:marker>
    </xsl:if>
    <xsl:if test="empty(ancestor::*[contains(@class, ' topic/topic ')]) and @product='OPTION'">
    <fo:marker marker-class-name="current-topic-number">
    <xsl:variable name="topicref" select="key('map-id', ancestor-or-self::*[contains(@class, ' topic/topic ')][1]/@id)"/>
    <xsl:for-each select="$topicref">
    <xsl:apply-templates select="." mode="topicTitleNumber"/>
    </xsl:for-each>
    </fo:marker>
    <fo:marker marker-class-name="OPTION">
    <fo:inline xsl:use-attribute-sets="title__option">
    <xsl:text>OPTION&#160;</xsl:text>
    </fo:inline>
    </fo:marker>
    </xsl:if>



    <xsl:apply-templates select="*[contains(@class, ' topic/title ')]"/>
    <xsl:apply-templates select="*[contains(@class, ' topic/prolog ')]"/>
    <xsl:apply-templates select="*[not(contains(@class, ' topic/title ')) and
    not(contains(@class, ' topic/prolog ')) and
    not(contains(@class, ' topic/topic '))]"/>
    <!--xsl:apply-templates select="." mode="buildRelationships"/-->
    <xsl:apply-templates select="*[contains(@class,' topic/topic ')]"/>
    <xsl:apply-templates select="." mode="topicEpilog"/>
    </xsl:template>

Discussions similaires

  1. [XSL] test égalité entre nodes
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 10/10/2005, 17h40
  2. [XSD] test de la valeur d'un attribut
    Par ka0z dans le forum Valider
    Réponses: 3
    Dernier message: 21/08/2005, 20h46
  3. xsl : test sur les chaine de caractère
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 13/07/2005, 15h43
  4. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  5. Réponses: 5
    Dernier message: 24/04/2003, 11h47

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