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] Modifer une structure de tableau dans for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut [XSL-FO] Modifer une structure de tableau dans for-each
    Bonjour,

    j'utilise fop et je voudrais en fait créer des cellules dans un tableau, dynamiquement à l'aide d'un for-each.

    Mon probleme c'est que je ne voudrais que deux cellules par ligne de tableau. Et en fait je ne sais pas comment faire pour qu'il passe a une autre ligne quand il a effectué deux tours dans le for-each.

    Donc je m'en remets à vous.

    Merci d'avance.

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

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

    tu fais un test avec position() mod 2 =0 et tu envoie te tes table-row a chaque fois que tu as la condition rempli!

    ++

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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par virgul
    Salut,

    tu fais un test avec position() mod 2 =0 et tu envoie te tes table-row a chaque fois que tu as la condition rempli!

    ++

    Thierry
    c'est ce que j'ai essayé de faire mais j'ai une erreur a chaque fois que j'essaye de mettre les table-row.

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    J'ai pas essayé mais tu les as mis dans un cdata tes table-row?
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par virgul
    J'ai pas essayé mais tu les as mis dans un cdata tes table-row?
    ah non je sais pas trop comment utiliser le cdata

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    je sais pas si ca va passer mais si tu fais un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if position mod 2!=0
    <![CDATA[&lt;table-row&gt;]>
     
    ton for-each
     
     
    if position mod 2=0
    <![CDATA[&lt;/table-row&gt;]>
    Essaye tu verra bien!

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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    en fait ça marche pas il me met le message d'erreur suivant :

    xml document must start and end with the same entity

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    C'est vrai c'étais pas tous a fait correcte!

    Voila comment procéder exactement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="toto/albert">
    <xsl:if test="position() mod 2 !=0">
    <xsl:text disable-output-escaping="yes"><![CDATA[<table-row>]]> </xsl:text></xsl:if>
    <xsl:value-of select="node()"/>
    <xsl:if test="position() mod 2 =0">
    <xsl:text disable-output-escaping="yes"><![CDATA[</table-row>]]> </xsl:text></xsl:if>
    </xsl:for-each>

    ++

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

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    y a du mieux mais y a encore quelque chose qui cloche il me dit :

    A table cell must child of fo:table-row not fo:table-body

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    A table cell must child of fo:table-row not fo:table-body
    c'est toi qui doit faire une erreur alors car la ce n'est pas possible dans mon exemple qu'un table-cell ce glisse avant que tu ne fasse un table-row!
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Tu parse tout avec FOP ou tu utilise d'abord msxml (par example) et après tu fais de ton fo du pdf?
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par virgul
    A table cell must child of fo:table-row not fo:table-body
    c'est toi qui doit faire une erreur alors car la ce n'est pas possible dans mon exemple qu'un table-cell ce glisse avant que tu ne fasse un table-row!
    bah moi en fait j'ai ça comme code ( a peu pres )
    ...
    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
     
    <fo:table>
    <fo:table-body>
    <xsl:for-each select="toto/albert">
    <xsl:if test="position() mod 2 !=0">
    <xsl:text disable-output-escaping="yes"><![CDATA[<table-row>]]> </xsl:text></xsl:if>
    <fo:table-cell>
    <xsl:value-of select="node()"/>
    </fo:table-cell>
    <xsl:if test="position() mod 2 =0">
    <xsl:text disable-output-escaping="yes"><![CDATA[</table-row>]]> </xsl:text></xsl:if>
    </xsl:for-each>
    </fo:table-body>
    </fo:table>
    ...
    donc en fait je pense qu'il crée une nouvelle row a chaque fois qu'il passe dans le for-each et c'est ça qui doit clocher non ?

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Faudrait voir pour...


    t'as oublié le fo: devant table-row!!!

    ++

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

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    non dans mon prog je l'ai pas oublié c'est juste que pour poster j'ai recopier ton post en y ajoutant des choses

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Tu parse tout avec FOP ou tu utilise d'abord msxml (par example) et après tu fais de ton fo du pdf?
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par virgul
    Tu parse tout avec FOP ou tu utilise d'abord msxml (par example) et après tu fais de ton fo du pdf?
    je parse tout avec fop

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ok ben t'as trois possibilités alors:

    1er possibilités si tu veux que ca marche comme ca faut que tu parse en premier avec parseur normal (msxml, xerces, ...) et une fois que tu as ton FO tu peux le parser avec FOP et ca marchera! Après tout dépend comment tu fais tes transformation si tu fais en ligne de commande fait un batch qui t'automatise le traitement et si tu fait en code ben faut lancé les transformations les uns après les autres!

    2ème possibilités tu va poser une question sur :

    http://groups.yahoo.com/group/XSL-FO/

    en anglais! je peux te la traduire et te la poster si tu ne parle pas anglais.


    3ème possibilité tu trouve une autre combine que celle ci pour faire ton truc! Peut-être qu'avec 2 for-each l'un dans l'autre c'est possible à voir!


    Car tout le problème réside en le fait que FOP doit (si je ne m'abuse) controler ton xml pour voir si il est conforme a ca DTD et vu qu'il ne l'est pas il génére une erreur avant de commencer a parser!

    A toi de voir!!!

    ++

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

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    bah ecoute si ça te deranges pas de poster la question en anglais pour moi j'accepte volontier.

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    C'est bien parce que c'est toi!!!


    Voila le post:

    Hi,

    I use FOP


    I wan't to make a table with 2 columns and I want to make that with one for-each.

    I make so:

    <fo:table>
    <fo:table-body>
    <xsl:for-each select="toto/albert">
    <xsl:if test="position() mod 2 !=0">
    <xsl:text disable-output-escaping="yes"><![CDATA[<fo:table-row>]]> </xsl:text></xsl:if>
    <fo:table-cell>
    <xsl:value-of select="node()"/>
    </fo:table-cell>
    <xsl:if test="position() mod 2 =0">
    <xsl:text disable-output-escaping="yes"><![CDATA[</fo:table-row>]]> </xsl:text></xsl:if>
    </xsl:for-each>
    </fo:table-body>
    </fo:table>

    All work great if I parse with Msxml for example and after I parse with FOP for have my PDF

    But If I parse directly with FOP that make me an error:

    A table cell must child of fo:table-row not fo:table-body

    but at the end the file is correct so why FOP make me an error! It is while at the beginnig of the transformation FOP validate the xml with a DTD?

    Is there a work around for make this with FOP only ?


    Thanks for your help
    It's very appreciated

    ++

    Thierry

    Je te donne des nouvelles si j'ai une réponse

    Bonne journée

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

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 53
    Points
    53
    Par défaut
    merci beaucoup a toi de te donner du mal pour m'aider en tout cas

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/05/2010, 19h24
  2. Réponses: 5
    Dernier message: 08/12/2008, 19h01
  3. importer une structure en sql dans 4D
    Par saturne27 dans le forum 4D
    Réponses: 2
    Dernier message: 15/01/2008, 11h08
  4. Allocation d'une structure avec tableau
    Par line86 dans le forum C
    Réponses: 5
    Dernier message: 02/10/2007, 11h38
  5. Mapper une structure en tableau de byte
    Par zarathoustroy dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/12/2006, 15h47

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