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 FO/quelque probleme pour la mise en page.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut XSL FO/quelque probleme pour la mise en page.
    Bonjour à tous,

    Je me suis inscris car j'ai des probleme avec fo.
    J'ai un fichier XML, un fichier XSL et avec FOP je converti en pdf.

    je vais commencer par le premier probleme.

    je veux dans mon fichier pdf une entête:
    je met mes commande dans le xsl et mon entete s'affiche mais en fait je ne souhaite pas que mon entête se mette sur les deux premiere pages.
    Donc je recherche une commande ou une astuce pour que l'entête se mette sur toutes les pages sauf les deux premieres.


    Mon second probleme:

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    mon second probleme:

    je genere une liste de note du type:

    1. blabla
    blalaal
    2. iosgqh
    2.1 kghfkwgh
    2.2 hdflsgsf
    3.pjdhpsh
    3.1 dmsh
    3.2 phgsd
    dhfssjmh
    3.3 jmxgjfgn
    etc...
    Je suis arrivé a faire afficher le 1, 2, 3 avec la commande number.
    mais je n'arrive pas à afficher le 2.1, 2.2,etc...
    mon fichier XML se presente comme ca:
    <meldef>
    <def>
    <para> texte </para>
    <subdef>
    <sdef>
    <para> texte</para>
    <para> texte</para>
    <para> texte</para>
    <para> texte</para>
    </sdef>
    </subdef>
    </def>
    </meldef>

    Voila si quelqu'un pourrait me donner des conseils

    merci à tous
    Atoila

  3. #3
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Pour ton second problème tu affiche tes nombre avec xsl:number? Si tel est le cas c'est normal il ne génére que des nombre entier. Si tu veux le formatter utilise plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="translate(format-number(tonnoeud, '###,###.##'), ',', $apos)"/>
    Pour le premier j'ai pas le temps de rechercher ce sujet mais j'ai déjà répondu à cette question fait une recherche sur ce forum tu le trouvera surement!

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    est ce que c'est possible en faisant:

    <xsl:number>
    ensuite de recuperer la valeur et de la stocker dans un data

    et de la remettre au niveau en dessous et de refaire un number pour avoir 2.1??
    En fait je recupere la valeur et je la reaffiche???

  5. #5
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Mais pourquoi tu veux faire avec xsl:number ?

    Il ne sert qu'a formaté les nombre entier et arrondi ceux qu'il ne le sont pas!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    J'ai reussi à resoudre le problèe de l'entête.donc merci.

    Pour le reste je n'avais trouvé que number et c'est pourquoi je suis rester sur cette idée qui n'a pas l'air d'être la bonne.

    Est ce que tu peux me detailler un peu plus ta commande stp car je nage la.
    merci d'avance

  7. #7
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Oui excuse-moi je t'aie envoyé tout sans explication:

    en faite il fait deux chose cette fonction XPAth
    tout d'abord défini une variable globale (hors d'un xsl:template) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="apos">'</xsl:variable>
    puis pour la fonction c'est assez simple pour une raison très simple tu ne peux pas déclarer directement le formatting du chiffre avec ' car il doit y en avoir une fermante l'astuce est donc d'utiliser une variable pour qu'il ne se rende pas compte.

    donc
    format-number('20000', '###,###.##') va te renvoyé 20,000

    # designe une terme non obligatoire
    0 designe ceux qui le sont

    se qui fait que si tu as : format-number(tonnoeud, '###,###.00') ca va te renvoyé 20,000.00

    Quand au translate : translate('20,000', ',', $apos) il te transforme en 20'000

    voila j'espère avoir été clair

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Merci pour l'explication.
    Mais je ne vois comment ca va me servir.
    si j'essai de comprendre:
    mon noeud est para.

    donc je dois faire
    <value-of select="translate(format-number(para, '###,###,##), ',',$apos)"/>

    et ca doit me generer mes 1 et mes 1.1, 1.2etc...
    ??

  9. #9
    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,

    <xsl:number> peut effectivement te numéroter correctement tes items, la difficulté étant de savoir quoi numéroter et comment. Je te donne un exemple d'utilisation (en me basant sur le XML que tu as donné en exemple) :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:template match="*">
    		<xsl:copy>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="def">
    		<xsl:copy>
    			<xsl:for-each select="para">
    				<xsl:copy>
    					<xsl:number count="def" level="single" format="1"/>
    					<xsl:value-of select="."/>
    				</xsl:copy>
    			</xsl:for-each>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
     
    	<xsl:template match="sdef">
    		<xsl:copy>
    			<xsl:for-each select="para">
    				<xsl:copy>
    					<xsl:number count="def|para" level="multiple" format="1"/>
    					<xsl:value-of select="."/>
    				</xsl:copy>
    			</xsl:for-each>
    		</xsl:copy>
    	</xsl:template>
    </xsl:stylesheet>
    La clé réside dans l'attribut level ; s'il est égal à multiple, chaque occurrence de noeud sélectionné par l'attribut count est numéroté selon les noeuds du même nom situés au même niveau dans l'arborescence, et les niveaux différents sont séparés par points. Ca a l'air compliqué comme ça, mais c'est plus facile à comprendre en expérimentant qu'à expliquer...
    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

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    merci pour ton aide mais je n'arrive pas à ce que je veux. je suis partis sur la même idée mais ca colle pas

    je met le code que j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:for-each select="increv/meldef/def">
    			<fo:block margin-left="8mm">
    			<xsl:number level="any" from="para"/>			
    			<xsl:for-each select="para">
    				<fo:block space-after="7mm" space-before="-5mm" font-size="11pt" margin-left="15mm">
    					<xsl:apply-templates/>
    				</fo:block>			
    			</xsl:for-each>
    			</fo:block>
    </xsl:for-each>
    avec ce code j'arrive à numeroter les 1, 2, 3 de mes paragraphes mais il me manque le bout de code pour avoir les 2.1,2.2, 3.1,etc...
    si quelqu'un pouvais me corriger mon code ça serait simpa.
    merci
    atoila

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    ESt ce que c'est possible de recuperer la valeur qui est generé par "number"?

    Je pense à mettre le code du post precedant, sauvegarder la valeur du number et la replacer avec un nouveau number au niveau suivant.
    C'est un peu recursif mais c'est peu être une idée.

    Si quelqu'un pense savoir si c'est possible et si tel est le cas comment faire ?

    Merci à tous

Discussions similaires

  1. [ZF 1.11] Probleme pour la mise en place d'un plugin pour le bootstrap
    Par offnight dans le forum MVC
    Réponses: 1
    Dernier message: 02/02/2012, 14h07
  2. Réponses: 4
    Dernier message: 04/05/2007, 10h26
  3. [Système] Aide pour la mise en page
    Par web007 dans le forum Langage
    Réponses: 6
    Dernier message: 20/10/2006, 22h23
  4. Besoin d'avis pour la mise en page
    Par jmjmjm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/09/2006, 00h49

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