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] Nombre de paramètres variable


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut [XSL~FO] Nombre de paramètres variable
    Bonjour!

    Toujours aussi débutant en XSL et XSL/FO, je suis tombé sur un petit problème fort génant
    J'ai un fichier XSL-FO qui contient un bloc. Les paramètres de ce bloc (text-align, border, etc..) se trouvent dans une "feuille de style" xml séparée (je n'ai pas utilisé de css car le fo obtenu est destiné à passer dans FOP):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <style>
        <bloc>
          <text-align>left</text-align>
        </bloc>
      </style>
    Mon problème c'est que je ne connais pas forcément le nombre de paramètres présents dans la feuille de style (on peut très bien décider de ne pas spécifier de couleur par exemple).
    Pour récupérer ces valeurs, je pensais utiliser la fonction document() de XPath et un petit for-each. Par contre, je ne vois pas comment je peux donner un nombre d'arguments variables à ma balise bloc dans mon XSL-FO.
    Donc si quelqu'un a une idée, je suis preneur

  2. #2
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

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

    Désolé je ne comprend pas trop ce que tu veux dire pourrait-tu illustrer ou expliquer autrement?

    Merci

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut
    (Désolé de sortir de ma torpeur si tard, j'ai changé de projet entre temps... )

    Je vais réexpliquer un peu mieux mon problème. En fait, j'ai un template en xsl-fo, et je veux que l'utilisateur final de mon appli puisse dire: "tiens finalement je voudrais que ce bloc soit en rouge". Ou bien encore "je voudrais ce bloc de texte en rouge et 12px".
    Après modification du fo en conséquence, je met tout ça dans fop pour en faire un pdf.
    Donc je ne connais pas le nombre de paramètres qui vont être ajoutés (ou modifiés) à la base... Mon problème est donc de savoir comment faire pour rajouter ces paramètres de façon dynamique dans mon fo.

    J'éspère avoir été plus clair cette fois-ci

  4. #4
    Membre Expert
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Par défaut
    Comment tu la fait ta transfo ?

    En faite il te suffit de passer des paramêtre dans ta feuille de style (XSLT).

    pour récupérer ton paramêtre que tu envoie il faut que tu fasse un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:param name="lenomduparam"/>
    cette balise doit être fils de xsl:stylesheet!

    et pour le rappeler sa marche comme avec les variable (avec un $ devant).

    A noté que tu peux passer des arbre xml en paramètre et tu peux naviguer dedans comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$lenomduparam/root/toto"/>

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    en XSLT, il est possible de spécifier une autre source XML avec la fonction document() qui prend en paramètre le nom d'un document XML et renvoie un node-set contenant la racine de ce document. Dans ton cas, elle s'utilisera de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <fo:block>
      <xsl:for-each select="document('style.xml')/style/bloc/*">
        <xsl:attribute name="{name()}">
          <xsl:value-of select="."/>
        </xsl:attribute>
      </xsl:for-each>
      [...]
    </fo:block>
    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

  6. #6
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Par défaut
    Merci beaucoup pour vos réponse, je vais essayer d'implémenter ça tout de suite , je vous dirais ce que ça donne

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

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. Stocker un nombre trop grand pour une variable
    Par mouhammed dans le forum C
    Réponses: 2
    Dernier message: 27/12/2007, 11h57
  3. Réponses: 2
    Dernier message: 16/10/2007, 10h53
  4. [XSLT] Probleme <xsl:if test=" element = $param "> !
    Par billynirvana dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/03/2007, 14h49
  5. Formulaire avec nombre de lignes de saisie variable
    Par NadègeG dans le forum Langage
    Réponses: 9
    Dernier message: 03/10/2006, 08h10

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