2017-10-20 26 views
0

après ma première publication incomplète, je l'essaie à nouveau avec une information plus détaillée.XML Transformation - Déclaration incomplète dans le fichier de sortie

Ceci est mon entrée fichier:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns1:BBkDNFBlkDirDeb xmlns:ns5="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" xmlns:ns1="urn:BBkDNF:xsd:BBkDNFBlkDirDeb"> 
    <ns1:SndgInst>MARKDEF0</ns1:SndgInst> 
    <ns1:RcvgInst>HYVEDEMXXX</ns1:RcvgInst> 
    <ns1:SrvcId>COR</ns1:SrvcId> 
    <ns1:TstCode>T</ns1:TstCode> 
    <ns1:FType>DNF</ns1:FType> 
    <ns1:FileRef>20171020COR13143</ns1:FileRef> 
    <ns1:FileBusDt>2017-10-20</ns1:FileBusDt> 
    <ns1:RoutingInd>ALL</ns1:RoutingInd> 
    <ns1:FileCycleNo>05</ns1:FileCycleNo> 
    <ns1:NumDDBlk>00000001</ns1:NumDDBlk> 
    <ns1:NumPCRBlk>00000000</ns1:NumPCRBlk> 
    <ns1:NumREJBlk>00000000</ns1:NumREJBlk> 
    <ns1:FIToFICstmrDrctDbt> 
     <ns5:GrpHdr> 
      <ns5:MsgId>CHASDEFXXXX2017-10-20COR13140000003</ns5:MsgId> 
      <ns5:CreDtTm>2017-10-20T13:14:32.020</ns5:CreDtTm> 
      <ns5:NbOfTxs>1</ns5:NbOfTxs> 
      <ns5:TtlIntrBkSttlmAmt Ccy="EUR">14.33</ns5:TtlIntrBkSttlmAmt> 
      <ns5:IntrBkSttlmDt>2017-10-20</ns5:IntrBkSttlmDt> 
      <ns5:SttlmInf> 
       <ns5:SttlmMtd>CLRG</ns5:SttlmMtd> 
       <ns5:ClrSys> 
        <ns5:Prtry>SCL</ns5:Prtry> 
       </ns5:ClrSys> 
      </ns5:SttlmInf> 
      <ns5:InstdAgt> 
       <ns5:FinInstnId> 
        <ns5:BIC>HYVEDEMXXX</ns5:BIC> 
       </ns5:FinInstnId> 
      </ns5:InstdAgt> 
     </ns5:GrpHdr> 
     <ns5:DrctDbtTxInf> 
      <ns5:PmtId> 
       <ns5:InstrId>2017-10-20-COR1314300000</ns5:InstrId> 
       <ns5:EndToEndId>NotProvided</ns5:EndToEndId> 
       <ns5:TxId>Test123</ns5:TxId> 
      </ns5:PmtId> 
      <ns5:PmtTpInf> 
       <ns5:SvcLvl> 
        <ns5:Cd>SEPA</ns5:Cd> 
       </ns5:SvcLvl> 
       <ns5:LclInstrm> 
        <ns5:Cd>CORE</ns5:Cd> 
       </ns5:LclInstrm> 
       <ns5:SeqTp>RCUR</ns5:SeqTp> 
      </ns5:PmtTpInf> 
      <ns5:IntrBkSttlmAmt Ccy="EUR">14.33</ns5:IntrBkSttlmAmt> 
      <ns5:ChrgBr>SLEV</ns5:ChrgBr> 
      <ns5:ReqdColltnDt>2017-10-20</ns5:ReqdColltnDt> 
      <ns5:DrctDbtTx> 
       <ns5:MndtRltdInf> 
        <ns5:MndtId>AL1234567894</ns5:MndtId> 
        <ns5:DtOfSgntr>2013-01-03</ns5:DtOfSgntr> 
        <ns5:AmdmntInd>true</ns5:AmdmntInd> 
        <ns5:AmdmntInfDtls> 
         <ns5:OrgnlCdtrSchmeId> 
          <ns5:Nm>Test</ns5:Nm> 
          <ns5:Id> 
           <ns5:PrvtId> 
            <ns5:Othr> 
             <ns5:Id>DE98ZZZ09999999999</ns5:Id> 
             <ns5:SchmeNm> 
              <ns5:Prtry>SEPA</ns5:Prtry> 
             </ns5:SchmeNm> 
            </ns5:Othr> 
           </ns5:PrvtId> 
          </ns5:Id> 
         </ns5:OrgnlCdtrSchmeId> 
        </ns5:AmdmntInfDtls> 
       </ns5:MndtRltdInf> 
       <ns5:CdtrSchmeId> 
        <ns5:Id> 
         <ns5:PrvtId> 
          <ns5:Othr> 
           <ns5:Id>DE98ZZZ09999999999</ns5:Id> 
           <ns5:SchmeNm> 
            <ns5:Prtry>SEPA</ns5:Prtry> 
           </ns5:SchmeNm> 
          </ns5:Othr> 
         </ns5:PrvtId> 
        </ns5:Id> 
       </ns5:CdtrSchmeId> 
      </ns5:DrctDbtTx> 
      <ns5:Cdtr> 
       <ns5:Nm>Test</ns5:Nm> 
      </ns5:Cdtr> 
      <ns5:CdtrAcct> 
       <ns5:Id> 
        <ns5:IBAN>DE59501108006161508350</ns5:IBAN> 
       </ns5:Id> 
      </ns5:CdtrAcct> 
      <ns5:CdtrAgt> 
       <ns5:FinInstnId> 
        <ns5:BIC>CHASDEFXXXX</ns5:BIC> 
       </ns5:FinInstnId> 
      </ns5:CdtrAgt> 
      <ns5:Dbtr> 
       <ns5:Nm>Test</ns5:Nm> 
      </ns5:Dbtr> 
      <ns5:DbtrAcct> 
       <ns5:Id> 
        <ns5:IBAN>DE16702203005100001146</ns5:IBAN> 
       </ns5:Id> 
      </ns5:DbtrAcct> 
      <ns5:DbtrAgt> 
       <ns5:FinInstnId> 
        <ns5:BIC>HYVEDEMXXX</ns5:BIC> 
       </ns5:FinInstnId> 
      </ns5:DbtrAgt> 
      <ns5:UltmtDbtr/> 
      <ns5:RmtInf> 
       <ns5:Ustrd>Test ABC</ns5:Ustrd> 
      </ns5:RmtInf> 
     </ns5:DrctDbtTxInf> 
    </ns1:FIToFICstmrDrctDbt> 
</ns1:BBkDNFBlkDirDeb> 

Ceci est mon XSLT-fichier:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:SCLSDD="urn:BBkDNF:xsd:BBkDNFBlkDirDeb" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:BBkDNF:xsd:BBkDNFBlkDirDeb BBkDNFBlkDirDeb.xsd" 
xmlns:myTxNS="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" 
exclude-result-prefixes="myTxNS SCLSDD xsi"> 
    <!-- Namespace myTxNS erforderlich um in der Basis-pacs.003-XML-Datei auf die einzelnen Transaktionen unterhalb von SCLSDD:FIToFIPmtRvsl zugreifen zu können --> 
    <xsl:output version="1.0" indent="yes" encoding="UTF-8" method="xml"/> 
    <xsl:param name="_find_iban" required="no"/> 
    <xsl:param name="_find_amount" required="no"/> 
    <xsl:param name="_find_iban2" required="no"/> 
    <xsl:param name="_find_amount2" required="no"/> 
    <xsl:param name="_rjct_anzahl" required="no"/> 
    <xsl:param name="_rjct_summe" required="no"/> 
    <xsl:template match="/"> 
<BBkUDF:BBkUDFBlkDirDeb 
namespace="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" 
xmlns:BBkUDF="urn:BBkUDF:xsd:BBkUDFBlkDirDeb" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:BBkUDF:xsd:BBkUDFBlkDirDeb BBkUDFBlkDirDeb.xsd"> 
      <BBkUDF:SndgInst>MARKDEF0</BBkUDF:SndgInst> 
      <!-- Sender ist immer BIC des SEPA Clearers im Test MARKDEF0 --> 
      <!-- <RcvgInst> 
       <xsl:value-of select="SCLSDD:BBkDNFBlkDirDeb/SCLSDD:SndgInst"/> 
      </RcvgInst> --> 
      <BBkUDF:RcvgInst>HYVEDEM0XXX</BBkUDF:RcvgInst> 
      <!-- als Empfänger kann nur die XXX Bank sein --> 
      <BBkUDF:SrvcId> 
       <xsl:value-of select="/SCLSDD:BBkDNFBlkDirDeb/SCLSDD:SrvcId"/> 
      </BBkUDF:SrvcId> 
      <!-- COR für CORE und B2B für B2B --> 
      <BBkUDF:TstCode>T</BBkUDF:TstCode> 
      <!-- T für Test --> 
      <BBkUDF:FType>UDF</BBkUDF:FType> 
      <!-- UDF für "Result of Settlement File" --> 
      <BBkUDF:FileRef> 
       <xsl:value-of select="format-dateTime(current-dateTime(),'[Y0001][M01][D01]P2[H01][m01][s01]')"/> 
       <!-- erzeugt eine 16stellige Filereferenz auf Basis aktuellem Datum damit es eindeutig ist und stellt eine Referenz des SEPA Clearers dar --> 
      </BBkUDF:FileRef> 
      <BBkUDF:RoutingInd>ALL</BBkUDF:RoutingInd> 
      <!-- ALL ist Standard für UDF --> 
      <BBkUDF:FileBusDt> 
       <xsl:value-of select="format-dateTime(current-dateTime(),'[Y0001]-[M01]-[D01]')"/> 
       <!-- Erstelldatum der Datei --> 
      </BBkUDF:FileBusDt> 
      <BBkUDF:FileCycleNo>05</BBkUDF:FileCycleNo> 
      <BBkUDF:FIToFICstmrDrctDbt> 
       <GrpHdr> 
        <MsgId> 
         <xsl:value-of select="/SCLSDD:BBkDNFBlkDirDeb/SCLSDD:FIToFICstmrDrctDbt/myTxNS:GrpHdr/myTxNS:MsgId"/> 
        </MsgId> 
        <CreDtTm> 
         <xsl:value-of select="/SCLSDD:BBkDNFBlkDirDeb/SCLSDD:FIToFICstmrDrctDbt/myTxNS:GrpHdr/myTxNS:CreDtTm"/> 
        </CreDtTm> 
        <NbOfTxs> 
         <xsl:value-of select="$_rjct_anzahl"/> 
        </NbOfTxs> 
        <TtlIntrBkSttlmAmt Ccy="EUR"> 
         <xsl:value-of select="$_rjct_summe"/> 
        </TtlIntrBkSttlmAmt> 
        <IntrBkSttlmDt> 
         <xsl:value-of select="/SCLSDD:BBkDNFBlkDirDeb/SCLSDD:FIToFICstmrDrctDbt/myTxNS:GrpHdr/myTxNS:IntrBkSttlmDt"/> 
        </IntrBkSttlmDt> 
        <SttlmInf> 
         <SttlmMtd>CLRG</SttlmMtd> 
         <ClrSys> 
          <Prtry>SCL</Prtry> 
         </ClrSys> 
        </SttlmInf> 
        <InstdAgt> 
         <FinInstnId> 
          <BIC>HYVEDEMXXX</BIC> 
         </FinInstnId> 
        </InstdAgt> 
       </GrpHdr> 
       <xsl:variable name="all_TxInf_Nodes" select="SCLSDD:BBkDNFBlkDirDeb/SCLSDD:FIToFICstmrDrctDbt/myTxNS:DrctDbtTxInf"/> 
       <xsl:for-each select="$all_TxInf_Nodes"> 
        <!-- hier muss per If-Anweisung ermittelt werden, ob die Zahlung übernommen werden soll --> 
        <xsl:variable name="betrag" select="myTxNS:IntrBkSttlmAmt"/> 
        <xsl:variable name="iban" select="myTxNS:DbtrAcct/myTxNS:Id/myTxNS:IBAN"/> 
        <xsl:if test="(number($betrag)=number($_find_amount) and $iban=$_find_iban)"> 
         <xsl:variable name="betrag" select="myTxNS:IntrBkSttlmAmt"/> 
         <!-- ermittelt den Betrag der Zahlung --> 
         <DrctDbtTxInf> 
          <xsl:apply-templates select="myTxNS:PmtId"/> 
          <xsl:apply-templates select="myTxNS:PmtTpInf"/> 
          <IntrBkSttlmAmt Ccy="EUR"> 
           <xsl:value-of select="myTxNS:IntrBkSttlmAmt"/> 
          </IntrBkSttlmAmt> 
          <xsl:apply-templates select="myTxNS:ChrgBr"/> 
          <xsl:apply-templates select="myTxNS:ReqdColltnDt"/> 
          <xsl:apply-templates select="myTxNS:DrctDbtTx"/> 
          <xsl:apply-templates select="myTxNS:Cdtr"/> 
          <xsl:apply-templates select="myTxNS:CdtrAcct"/> 
          <xsl:apply-templates select="myTxNS:CdtrAgt"/> 
          <xsl:apply-templates select="myTxNS:UltmtCdtr"/> 
          <xsl:apply-templates select="myTxNS:InstgAgt"/> 
          <xsl:apply-templates select="myTxNS:Dbtr"/> 
          <xsl:apply-templates select="myTxNS:DbtrAcct"/> 
          <xsl:apply-templates select="myTxNS:DbtrAgt"/> 
          <xsl:apply-templates select="myTxNS:UltmDbtr"/> 
          <xsl:apply-templates select="myTxNS:Purp"/> 
          <xsl:apply-templates select="myTxNS:RmtInf"/> 
         </DrctDbtTxInf> 
        </xsl:if> 
       </xsl:for-each> 
       <xsl:for-each select="$all_TxInf_Nodes"> 
        <!-- hier muss per If-Anweisung ermittelt werden, ob die Zahlung übernommen werden soll --> 
        <xsl:variable name="betrag" select="myTxNS:IntrBkSttlmAmt"/> 
        <xsl:variable name="iban" select="myTxNS:DbtrAcct/myTxNS:Id/myTxNS:IBAN"/> 
        <xsl:if test="(number($betrag)=number($_find_amount2) and $iban=$_find_iban2)"> 
         <xsl:variable name="betrag" select="myTxNS:IntrBkSttlmAmt"/> 
         <!-- ermittelt den Betrag der Zahlung --> 
         <DrctDbtTxInf> 
          <xsl:apply-templates select="myTxNS:PmtId"/> 
          <xsl:apply-templates select="myTxNS:PmtTpInf"/> 
          <IntrBkSttlmAmt Ccy="EUR"> 
           <xsl:value-of select="myTxNS:IntrBkSttlmAmt"/> 
          </IntrBkSttlmAmt> 
          <xsl:apply-templates select="myTxNS:ChrgBr"/> 
          <xsl:apply-templates select="myTxNS:ReqdColltnDt"/> 
          <xsl:apply-templates select="myTxNS:DrctDbtTx"/> 
          <xsl:apply-templates select="myTxNS:Cdtr"/> 
          <xsl:apply-templates select="myTxNS:CdtrAcct"/> 
          <xsl:apply-templates select="myTxNS:CdtrAgt"/> 
          <xsl:apply-templates select="myTxNS:UltmtCdtr"/> 
          <xsl:apply-templates select="myTxNS:InstgAgt"/> 
          <xsl:apply-templates select="myTxNS:Dbtr"/> 
          <xsl:apply-templates select="myTxNS:DbtrAcct"/> 
          <xsl:apply-templates select="myTxNS:DbtrAgt"/> 
          <xsl:apply-templates select="myTxNS:UltmDbtr"/> 
          <xsl:apply-templates select="myTxNS:Purp"/> 
          <xsl:apply-templates select="myTxNS:RmtInf"/> 
         </DrctDbtTxInf> 
        </xsl:if> 
       </xsl:for-each> 
      </BBkUDF:FIToFICstmrDrctDbt> 
     </BBkUDF:BBkUDFBlkDirDeb> 
    </xsl:template> 
    <xsl:template match="myTxNS:*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:apply-templates select="node()"/> 
     </xsl:element> 
    </xsl:template> 
    <xsl:template match="myTxNS:*/*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:apply-templates select="node()"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

Ceci est la première partie du fichier de sortie (le reste est correct):

<?xml version="1.0" encoding="UTF-8"?> 
<BBkUDF:BBkUDFBlkDirDeb xmlns:BBkUDF="urn:BBkUDF:xsd:BBkUDFBlkDirDeb" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         namespace="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" 
         xsi:schemaLocation="urn:BBkUDF:xsd:BBkUDFBlkDirDeb BBkUDFBlkDirDeb.xsd"> 

Et c'est l'objectif à atteindre:

<?xml version="1.0" encoding="UTF-8"?> 
<BBkUDF:BBkUDFBlkDirDeb xmlns:BBkUDF="urn:BBkUDF:xsd:BBkUDFBlkDirDeb" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" 
         xsi:schemaLocation="urn:BBkUDF:xsd:BBkUDFBlkDirDeb BBkUDFBlkDirDeb.xsd"> 

Comme vous pouvez le voir, la seule différence entre les deux résultats est le "namespace", que j'ai utilisé pour transférer le reste du fichier d'entrée correct au fichier de sortie.

Si j'ai changé (dans le fichier xslt) la valeur de "namespace" (espace réservé) en "xmlns" attendu, le fichier généré complet est corrompu. Sur différents niveaux de la balise « xmlns = » « » est placé là où il ne devrait pas être :(

Je ne ai besoin du schéma-déclaration suivante dans le fichier cible/sortie:

<BBkUDF:BBkUDFBlkDirDeb xsi:schemaLocation="urn:BBkUDF:xsd:BBkUDFBlkDirDeb BBkUDFBlkDirDeb.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:BBkUDF="urn:BBkUDF:xsd:BBkUDFBlkDirDeb" xmlns="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02"> 

That' s tout.

Si je l'ai écrit encore « difficile » s'il vous plaît ne pas hésiter à me donner une rétroaction. Merci & BR Christian

+0

La "déclaration XML" est la construction avant le premier élément comme ''. Vous semblez avoir des problèmes avec les déclarations d'espace de noms, pas avec la déclaration XML. –

+0

Alors quel est le problème, votre sujet et votre texte parlent de la déclaration XML (par exemple ''), Votre dernière phrase parle de changer la cible 'xmlns'. –

+0

Désolé d'être un peu déroutant sur le "libellé" :) –

Répondre

0

Déplacer le xmlns="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02" sur le <xsl:stylesheet élément, qui devrait alors éviter le xmlns="" Je suppose que vous obtenez pour les éléments que vous créez avec les deux derniers modèles.