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 :

[XSLT] Modification d'une position de Sommaire sous XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut [XSLT] Modification d'une position de Sommaire sous XSLT
    Bonjour,
    Celui qui a fait le xslt sur lequel je travaille, a fait un sommaire et pour l'appeler dans le xml de sortie, il a déclarer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <!-- Crée le sommaire si ce noeud est celui de plus haut niveau -->
    <xsl:if test="..=/ ">
    <xsl:call-template name="Sommaire"/>
    </xsl:if>
    alors moi je ne veux pas que le sommaire s'affiche sur le noeud le plus haut mais juste après une balise qui s'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Page_perso>...</Page_perso>
    qui contient des informations que je dois récupérer avant le sommaire. En gros le fichier actuel après transformation donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Assemblage>
    <TDMPAGE>...</TDMPAGE>
    <Page_perso>...</Page_perso>
    <Chapitre>...</Chapitre>
    <Section>...</Section>
    Etc...
    </Assemblage>
    Et moi je veux une sortie comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Assemblage>
    <Page_perso>...</Page_perso>
    <TDMPAGE>...</TDMPAGE>
    <Chapitre>...</Chapitre>
    <Section>...</Section>
    Etc...
    </Assemblage>

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    pour le test tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="Page_perso ">
    <xsl:call-template name="Sommaire"/>
    </xsl:if>
    et tu le plasse aprés avoir recuperer tes infos de "Page_perso"
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Justement c'est là où ça m'embête parce que je n'ai que ça pour appeler tout le contenu:
    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 match="*">
    <xsl:element name="{name()}">
    <xsl:for-each select="@*">
    <xsl:attribute name="{name(.)}">
          <xsl:choose>
          <xsl:when test="name(.)='colwidth'">
           <xsl:value-of select="translate(.,'cm','*')"/>
             </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="."/>
               </xsl:otherwise>
                  </xsl:choose>
                  </xsl:attribute>
             </xsl:for-each>
             <!-- Crée le sommaire si ce noeud est celui de plus haut niveau-->
             <xsl:if test="..=/ ">
    	<xsl:call-template name="Sommaire"/>
    	</xsl:if> 
             <!-- Descente dans les sous noeuds -->
             <xsl:apply-templates/>
    </xsl:element>
    alors est ce qu'il faut que je fasse des template match pour chacun de mes éléments? ou c'est pas nécessaire

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je n'ai pas tout ton xsl, mais moi je le mettrait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="name(.) ='Page_perso'">
    <xsl:call-template name="Sommaire"/>
    </xsl:if>
    juste aprés ta balise fermante :

    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Ben en fait le truc c'est que ça n'a pas marché c'est pour ça que je l'ai pas fini.J'ai testé ce qui suit en enlevant le xsl:test de mon xslt mais toujour rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:template match="Assemblage_Gamme">
    <Assemblage_Gamme>
    <xsl:apply-templates select="Page_perso"/>			
    <xsl:call-template name="Sommaire"/>
    <xsl:apply-templates select="*[name() != 'Page_perso' and name() != 'Sommaire']"/>							
    </Assemblage_Gamme> 
    </xsl:template>
    Dieu sait que c'est tjr d'actu donc si tu peux faire quelq choz, Merci

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    il se passe quelques chose quand même?
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Si si il se passe bien quelque chose parce que mon sommaire s'affiche, mais toujours au tout début juste après la balise "Assemblage_Gamme"

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je suis un peu perdu avec tt ses bout de codes. est ce que tu peux reposter un exemple de ton xml et de ton xsl actuels (s'il ne sont pas trés grand).
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    C'est là le problème c'est que les fichiers xml sont assez gros. Là je t'ai sélectionner toute la partie qui doit concerner notre affaire: le cas du sommaire et le cas des choose et when qui s'applique avec mon tgroupstyle pas (voir mon autre post). voir document en pièce jointe
    Merci
    Fichiers attachés Fichiers attachés

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je n'ai pas tt les elements mais tu peux essayer avec ça :

    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
     
    <!--Essai pour afficher le sommaire apres <page_perso>-->
    	<xsl:template match="Assemblage_Gamme">
    			 <Assemblage_Gamme>
    				<xsl:apply-templates select="Page_perso"/>			
    				<xsl:apply-templates select="*[name() != 'Page_perso' and name() != 'Sommaire']"/>							
    				 <!--xsl:apply-templates/-->
    				</Assemblage_Gamme> 
    	</xsl:template>
     
    <xsl:template match="Page_perso">
    <xsl:element name="Page_perso">
    <xsl:apply-templates/>
    </xsl:element>
    <xsl:call-template name="Sommaire"/>
    </xsl:template>
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    j'avais déjà testé ça mais à cause sans doute de ceci que tu dois avoir sur le fichier joint
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!-- Descendre dans tous les noeuds pour constituer le sommaire -->
    	<xsl:template match="*" mode="toc">
    		<xsl:apply-templates mode="toc"/>
    	</xsl:template>
    il ne m'affichait que la balise <TDM> sans contenu.
    Là j'ai retesté quand même mais c'est pareil

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    JE NE VOIS PAS!

    tu peux essayer de remplacer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template name="Sommaire">
    		<TDMPAGE>
    			<TDMTITRE0><Phrase code="1490">@1490@Sommaire@</Phrase></TDMTITRE0>
    			<TDM><xsl:apply-templates mode="toc"/></TDM>
    		</TDMPAGE> 
    </xsl:template>
    	<!-- Descendre dans tous les noeuds pour constituer le sommaire -->
    	<xsl:template match="*" mode="toc">
    		<xsl:apply-templates mode="toc"/>
    	</xsl:template>
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template name="Sommaire">
    		<TDMPAGE>
    			<TDMTITRE0><Phrase code="1490">@1490@Sommaire@</Phrase></TDMTITRE0>
    			<TDM><xsl:apply-templates select="*" mode="toc"/></TDM>
    		</TDMPAGE> 
    </xsl:template>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il ne m'affichait que la balise <TDM> sans contenu
    oui, mais est ce qu'au moins il l'affiche au bon endroit?
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par valal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    il ne m'affichait que la balise <TDM> sans contenu
    oui, mais est ce qu'au moins il l'affiche au bon endroit?
    La réponse est: oui. il l'affiche bien au bon endroit. je teste ta proposition et je te tiens au courant. Merci

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    ça ne marche pas!!! Il m'affiche que la balise TDM sans son contenu. Ne t'embête plus laisse tomber si tu as des trucs à faire. Merci

  15. #15
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Ton fichier est trop partiel pour savoir quel template appelle page perso.
    Si par des test tu arrives à la trouver rajoute à la fin de celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="self::Page_perso">
    <xsl:call-template ........./>
    </xsl:if>

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Salut,
    est ce que quelqu'un peut regarder mes fichiers xsl et xml en Pieces Jointes et me dire comment dois je faire pour placer mon sommaire derriere l'élément Page_perso.
    Actuellement mon xslt avec le sommaire me donne un document xml comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Assemblage_Gamme>
    <TDMPAGE/>
    <Page_perso/>
    <Cha/>
    <SECTION/>
    etc.
    <Assemblage_Gamme/>
    moi je veux ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Assemblage_Gamme>
    <Page_perso/>
    <TDMPAGE/>
    <Cha/>
    <SECTION/>
    etc.
    <Assemblage_Gamme/>
    SVP regardez mes 2 fichiers et dites moi car je traine avec ce problème depuis fort longtemps sans trouver de solution et là c'est devenu urgent
    Merci d'avance
    Fichiers attachés Fichiers attachés

  17. #17
    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
    Depuis tout ce temps tu n'as pas avancé d'un pouce !?

    Bon... J'ai regardé tes fichiers, et je dois dire que c'est assez mal parti : la feuille de style a été développée selon une conception PUSH, ce qui signifie que les noeuds du document XML ne sont pas sélectionnés puis transformés mais transformés selon leur ordre d'apparition dans le document.

    Contrairement au mode PULL, tu n'as donc pas la main sur l'ordre de traitement des noeuds, et il faudrait donc revoir la conception de ta feuille de style. Ca consisterait en gros à créer un template "matchant" la racine /, et dans lequel tu définirais toi-même l'ordre de traitement avec des <xsl:apply-templates select="..." />.

    Maintenant, je te pose une question : est-il absolument nécessaire que Page_Perso soit avant ta table des matières ? Sachant que leur sémantique ne semble pas être la même, je ne vois en quoi leur ordre d'apparition a une importance...
    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

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Merci Grand Father!
    en fait je veux absolument que Page_perso soit avant le sommaire parce que ceci est un manuel d'utilisation qui après transformation xslt et ouverture sur framemaker doit donner un document prêt à être livré (version imprimable et pdf). Page_perso étant la page de couverture. Bien sûr y a tt un travail derriere!
    Si je suis ta logique il faudrait que je refasse à peu près ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:template match="/">
    <xsl:apply-templates select="Page_perso"/>
    <xsl:call-template name="Sommaire"/>
    <xsl:apply-templates/>
    et après déclarer chacun de mes templates?

  19. #19
    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
    En gros, oui, mais plutôt que de faire cela dans ta 1ère feuille de style, qui va être un peu compliquée à modifier, pourquoi ne le fais-tu pas dans ta deuxième feuille de style, celle qui transforme en PDF ?
    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

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 120
    Points : 56
    Points
    56
    Par défaut
    Ah! je ne connais pas cette methode de transformation xsl > pdf. de toute façon ma tranformation pdf passe par un progiciel développé en interne et la génération se fait en fin de processus. Il y a tt un tralala avant. Ceci dit ça m'interesse dans la mesure où cette methode me permettrait peut être de contourner mon problème. Je t'avoue qu'avec le peu de test que j'ai fait ça n'a pas l'air d'être simple cette histoire de match "/"
    Peux tu me donner des indications?

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/08/2010, 09h20
  2. Modification d'une application sous Excel language Vba
    Par Mézeau Emilien dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/04/2008, 09h13
  3. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  4. [XSLT]Trouver un noeud avec une condition sur ses sous-noeuds
    Par enguerran dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2007, 11h00
  5. [XSLT] [JavaScript] tri + affichage à partir d'une position
    Par Fabouney dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/11/2006, 08h46

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