Bonjour,
j'ai un fichier XML dans lequel il y a des informations qui se suivent sans liens particuliers.
J'ai d'abord un ensemble de factures (entre <Sale> et </Sale>) et après, suit un ensemble de détails (entre <Détail> et </Détail>).
J'essaye de transformer ce fichier XML au moyen d'un fichier XLS. Je souhaite lors de cette transformation faire une imbrication de sorte que pour chaque <Sale> correspondent plusieurs <Detail>. En effet à chaque ''OurRef'' dans <Sale> correspond plusieurs ''Ref'' dans <Detail>. Exemple dans un extrait du fichier ci-dessous : à ''OurRef'' 148214 dans <Sale> correspond deux ''Ref'' 148214 dans <Detail>. Il me semble qu'il devrait être possible au moyen d'un fichier XSL de transformer ce fichier XML (sans les imbrications) en un autre fichier XML (avec les imbrications), mais je n'y arrive pas.
voici quelques lignes qui illustrent le fichier XML :Voici au complet le fichier XSL :
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 <?xml version="1.0" encoding="UTF-8"?> -<dataroot generated="2014-04-24T15:51:47" xmlns:od="urn:schemas-microsoft-com:officedata"> -<Sale> <Customer_Prime>540</Customer_Prime> <OurRef>148214/</OurRef> <Amount>146,49</Amount> ... </Sale> -<Sale> <Customer_Prime>612</Customer_Prime> <OurRef>148058/</OurRef> <Amount>2988,09</Amount> ... </Sale> -<Detail> <Account>400000</Account> <Amount>147,59</Amount> <Ref>148214/</Ref> ... </Detail> -<Detail> <Account>700300</Account> <Amount>139,38</Amount> <Ref>148214/</Ref> ... </Detail> -<Detail> <Account>400000</Account> <Amount>3008,42</Amount> <Ref>148058/</Ref> </Detail> -<Detail> <Account>701000</Account> <Amount>32,73</Amount> <Ref>148058/</Ref> ... </Detail> </dataroot>
Mon ''xsl:if test'' ne fonctionne pas et même si je l'enlève, les deux ''for-each'' ne me donnent pas le résultat souhaité.
Qu'en pensez-vous ? Mon approche est-elle sensée/réalisable ? Si oui, où seraient les erreurs dans le XLS ? Merci. Cordialement. Richard
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="//dataroot"> <ImportExpMPlus> <Sales> <xsl:for-each select="Sale"> <Sale> <Journal_Prime> <xsl:value-of select="Journal_Prime"/> </Journal_Prime> <Customer_Prime> <xsl:value-of select="Customer_Prime"/> </Customer_Prime> <CurrencyCode> <xsl:value-of select="CurrencyCode"/> </CurrencyCode> <DocType> <xsl:value-of select="DocType"/> </DocType> <DocNumber> <xsl:value-of select="DocNumber"/> </DocNumber> <DocDate> <xsl:value-of select="DocDate"/> </DocDate> <DueDate> <xsl:value-of select="DueDate"/> </DueDate> <OurRef> <xsl:value-of select="OurRef"/> </OurRef> <YourRef> <xsl:value-of select="YourRef"/> </YourRef> <Amount> <xsl:value-of select="Amount"/> </Amount> <Discount> <xsl:value-of select="Discount"/> </Discount> <AccountingPeriod> <xsl:value-of select="AccountingPeriod"/> </AccountingPeriod> <VATMonth> <xsl:value-of select="VATMonth"/> </VATMonth> <Year_Alfa> <xsl:value-of select="Year_Alfa"/> </Year_Alfa> <Ventil> <xsl:value-of select="Ventil"/> </Ventil> <VATAmount> <xsl:value-of select="VATAmount"/> </VATAmount> <Status> <xsl:value-of select="Status"/> </Status> <Rate> <xsl:value-of select="Rate"/> </Rate> <Details> <xsl:for-each select="Detail"> <xsl:if test="Ref=YourRef"> <Detail> <Account> <xsl:value-of select="Account"/> </Account> <Amount> <xsl:value-of select="Amount"/> </Amount> <DebCre> <xsl:value-of select="DebCre"/> </DebCre> <Ventil> <xsl:value-of select="Ventil"/> </Ventil> <Ref> <xsl:value-of select="Ref"/> </Ref> <Unit1> <xsl:value-of select="Unit1"/> </Unit1> <Unit2> <xsl:value-of select="Unit2"/> </Unit2> </Detail> </xsl:if> </xsl:for-each> </Details> </Sale> </xsl:for-each> </Sales> </ImportExpMPlus> </xsl:template> </xsl:stylesheet>
Partager