Bonjour,

je suis débutant en langage xslt et je pédale dans la semoule avec mon fichier xml, je m'explique :

je reçois un fichier xml du type
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
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 pacs.003.001.02.xsd">
	<FIToFICstmrDrctDbt>
		<GrpHdr>
                       <MsgId>14992654380</MsgId>
			<NbOfTxs>3</NbOfTxs>
			<TtlIntrBkSttlmAmt Ccy="EUR">145.00</TtlIntrBkSttlmAmt>
                </GrpHdr>
		<DrctDbtTxInf>
                       <TxId>12341</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">20.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
                <DrctDbtTxInf>
                       <TxId>12342</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">50.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
                <DrctDbtTxInf>
                       <TxId>12343</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">75.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
       </FIToFICstmrDrctDbt>
</Document>
et je dois en faire 3 fichiers (pour cet exemple) mais en gardant un header à chaque fois adapté (cf données en gras):

1er fichier
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
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 pacs.003.001.02.xsd">
	<FIToFICstmrDrctDbt>
		<GrpHdr>
                       <MsgId>14992654380</MsgId>
			<NbOfTxs>1</NbOfTxs>
			<TtlIntrBkSttlmAmt Ccy="EUR">20.00</TtlIntrBkSttlmAmt>
                </GrpHdr>
		<DrctDbtTxInf>
                       <TxId>12341</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">20.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
        </FIToFICstmrDrctDbt>
</Document>
2ème fichier :

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
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 pacs.003.001.02.xsd">
	<FIToFICstmrDrctDbt>
		<GrpHdr>
                       <MsgId>14992654380</MsgId>
			<NbOfTxs>1</NbOfTxs>
			<TtlIntrBkSttlmAmt Ccy="EUR">50.00</TtlIntrBkSttlmAmt>
                </GrpHdr>
		<DrctDbtTxInf>
                       <TxId>12342</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">50.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
        </FIToFICstmrDrctDbt>
</Document>

3ème fichier :

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
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02 pacs.003.001.02.xsd">
	<FIToFICstmrDrctDbt>
		<GrpHdr>
                       <MsgId>14992654380</MsgId>
			<NbOfTxs>1</NbOfTxs>
			<TtlIntrBkSttlmAmt Ccy="EUR">75.00</TtlIntrBkSttlmAmt>
                </GrpHdr>
		<DrctDbtTxInf>
                       <TxId>12343</TxId>
                       <IntrBkSttlmAmt Ccy="EUR">75.00</IntrBkSttlmAmt>
                </DrctDbtTxInf>
        </FIToFICstmrDrctDbt>
</Document>

J'essaye d'utiliser XSLT pour transformer tout ça mais à part copier l'intégralité du fichier, et initialiser <NbOfTxs> à 1, mes différents essais avec ce que je trouve sur le web n'aboutissent pas.


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
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pain="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02">
 
	<xsl:output method="xml"/>
 
 
<!-- copie fichier  -->
	<xsl:template match="@*">
  		<xsl:copy />
	</xsl:template>
 
	<xsl:template match="*">
 		<xsl:element name="{name()}" >
    		<xsl:apply-templates select="* | text() | @*"/>
  		</xsl:element>
	</xsl:template>
 
<!-- modif zone  -->
<xsl:template match="pain:GrpHdr/pain:NbOfTxs">
		<xsl:element name="NbOfTxs">
			<xsl:value-of select="1"/>
		</xsl:element>
	</xsl:template>

Merci pour votre aide