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 : ligne de tableau specifique en fonction d'un test


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut xsl-fo : ligne de tableau specifique en fonction d'un test
    bonjour à tous,

    je suis debutant en xslt et xsl-fo.

    je produit du doc pdf en sortie avec des tableaux.
    et un utilisateur souhaiterait que je fasse apparaitre tel ou tel ligne de mon tableau en gras en fonction de certains criteres.

    par exemple :

    changement d'appartenance à un departement.
    depassement d'un chiffre d'affaire.

    voici le contenu de mon doc xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <ens>
       <nom>nom1</nom>
       <dept>dept1</dept>
    </ens>
    <ens>
       <nom>nom2</nom>
       <dept>dept1</dept>
    </ens>
    <ens>
       <nom>nom1</nom>
       <dept>dept2</dept>
    </ens>
    dans mon cas je voudrais que des qu'il y a un changement de departement la sortie <fo-block > soit en gras sinon en normal.

    quelqu'un a une idee sur la maniere de proceder sachant que je cree le document XML de base.

    merci

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

    une des possibilités serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="dept">
      <xsl:choose>
        <xsl:when test="preceding::dept[1] != .">
          ...affichage en gras...
        </xsl:when>
        <xsl:otherwise>
          ...affichage normal...
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    il faut donc que je duplique les balises <fo:table-row></fo:table-row>

    et dans la premiere apparition du noeud, quand il n'y a pas de precedent que se passe t-il ?

    mais que represente le dept[1]

    je vais deja essaye ton code, j'essairai de comprendre apres.

    merci.

  4. #4
    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
    Citation Envoyé par de LANFRANCHI
    il faut donc que je duplique les balises <fo:table-row></fo:table-row>
    Pas forcément, voici un exemple un peu plus complet :
    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
    <xsl:template match="ens"> 
      <fo:table-row>
        <xsl:apply-templates/>
      <fo:table-row>
    </xsl:template>
     
    <xsl:template match="dept"> 
      <fo:table-cell>
        <fo:block>
          <xsl:if test="preceding::dept[1] != ."> 
            <xsl:attribute name="font-style">bold</xsl:attribute>
          </xsl:if> 
          <xsl:value-of select="."/> 
        </fo:block>
      </fo:table-cell>
    </xsl:template>
    Citation Envoyé par de LANFRANCHI
    et dans la premiere apparition du noeud, quand il n'y a pas de precedent que se passe t-il ?
    Dans l'exemple ci-dessus, rien : l'attribut "font-style" ne sera pas ajouté à l'élément <fo:block>

    Citation Envoyé par de LANFRANCHI
    mais que represente le dept[1]
    preceding::dept[1] signifie : "sélectionner le premier noeud <dept> précédant le noeud courant (le <dept> dont le template s'exécute)
    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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    dans mon cas je suis dans un <xsl:template match="ens">

    comment puis-je tester l'element dept lui-meme et tester la valeur null


    merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    c'est bon, cela fonctionne

    encore une question:
    peut on mettre un OR dans le test et comment test-on une valeur null ?

    merci

  7. #7
    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
    Pour le test d'élément vide, voir ce post : http://www.developpez.net/forums/viewtopic.php?t=300941

    Quant au or, il n'y a aucun problème (penser seulement aux parenthèses pour gérer d'éventuels problèmes de priorités)
    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

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    ok, j'ai regarde le topic

    mais dans mon cas , il faut que je test si il y a un element precedent ou si l'element courant est le premier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:when test="(preceding::NUM-ACTION[1] != NUM-ACTION/.)">
    </xsl:when>
    dans ce test,dans le traitement du premier noeud, le precedent et le courant sont egaux, non ?

  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
    Ton expression XPath est incorrecte. Le point désigne l'élément courant, que tu prends comme base pour désigner l'élément à comparer. Dans l'hypothèse où l'élément NUM-ACTION est un fils de l'élément courant, l'expression correcte devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:when test="(preceding::NUM-ACTION[1] != ./NUM-ACTION)"> 
    </xsl:when>
    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
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    ok merci pour toutes ces infos

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/02/2015, 09h02
  2. XSL comparaison ligne tableau
    Par flaschgordon dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/05/2013, 10h11
  3. Réponses: 5
    Dernier message: 29/09/2011, 09h35
  4. [xsl-fo] ligne dans un tableau
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/04/2010, 11h15
  5. Réponses: 15
    Dernier message: 16/09/2009, 16h19

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