Bonjour,
Je suis débutant en XSL-FO, et je dois écrire du XSL-FO pour imprimer un XML en changeant la présentation. J'utilise FOP pour permettre l'impression en PDF, et j'ai vu qu'il fallait fournir un XSL-FO à FOP pour transformer le XML de base et pour faire l'affichage graphique.
Mon XML est le suivant :
J'ai mis le XSD en pièce jointe.
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
33
34
35 <?xml version="1.0" encoding="UTF-8"?> <DOCUMENT> <DATE>17-08-09</DATE> <USER_NAME>MOI</USER_NAME> <APP_ID>64</APP_ID> <APP_NAME>TEST CDE</APP_NAME> <TITLE>TITRE</TITLE> <REGION> <ROWSET> <ROW> <IDDOSSIER>0404</IDDOSSIER> <IDCLIENT>7857</IDCLIENT> <DATECDE>24/02/09</DATECDE> <QTECDE>1</QTECDE> <Nomenclature>670281CJ</Nomenclature> <DESIGNATION>Test 1</DESIGNATION> <NOMMARQUE>ORANGE</NOMMARQUE> <REFFOUR>SONY</REFFOUR> </ROW> <ROW> <IDDOSSIER>0300</IDDOSSIER> <IDCLIENT>8988</IDCLIENT> <DATECDE>07/02/09</DATECDE> <QTECDE>2</QTECDE> <Nomenclature>702122B1</Nomenclature> <DESIGNATION>Test 2</DESIGNATION> <NOMMARQUE>SFR</NOMMARQUE> <REFFOUR>SAMSUNG</REFFOUR> </ROW> <ROW> ... </ROW> </ROWSET> </REGION> </DOCUMENT>
Mon problème est que je n'arrive pas à écrire le fichier XSL-FO qui me permettrait ne serait-ce que d'afficher le contenu de mon XML !!
J'arrive à afficher la date, app_name, app_id et autres éléments de premier niveau, mais je n'arrive pas à aller plus loin ...
Voici la partie où je parcours l'arbre :
Mais je ne récupère que :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 <fo:flow flow-name="region-body"> <fo:block> <xsl:apply-templates/> Test <xsl:value-of select="DOCUMENT/APP_ID"/> <fo:table border="1"> <xsl:for-each select ="DOCUMENT/REGION/ROWSET/ROW"> <xsl:value-of select="DOCUMENT/REGION/ROWSET/ROW/IDDOSSIER"/> </xsl:for-each> </fo:table> </fo:block> </fo:flow> avec aussi : <xsl:template match="REGION"> <fo:table border="1"> <fo:block> <xsl:apply-templates/> </fo:block> </fo:table> </xsl:template> <xsl:template match="ROWSET"> <fo:table border="1"> <fo:block> <xsl:apply-templates/> </fo:block> </fo:table> </xsl:template> <xsl:template match="ROW"> <fo:block> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="IDDOSSIER"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="IDCLIENT"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="DATECDE"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="QTECDE"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="Nomenclature"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="DESIGNATION"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="NOMMARQUE"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="REFFOUR"> <xsl:value-of select="."/> </xsl:template>
16-FEB-09 APEX_PUBLIC_USER 195 Test-PDF 16 CDENONVALIDEE bis
Test 195
Mon objectif est d'avoir un rendu final de ce genre :
Est-ce que quelqu'un saurait comment faire le XSL-FO de manière à savoir afficher les ROWS (dans un premier temps), et si possible comment trier par les 2 premières colonnes (je crois avoir trouvé fo:for-each-group select="ROW", mais je ne suis pas sûr) ??
Rem. : Il semblerait que le XML et le XSD ne soient pas concordants ??!!
Est-ce que quelqu'un pourrait me confirmer (ou infirmer) cette remarque ??
Partager