Splitter un fichier XML avec un header fixe
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:
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:
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:
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:
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:
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