2017-10-20 388 views
0

在我第一次發佈不完整信息後,我再次嘗試使用更詳細的信息。XML轉換 - 輸出文件中的不完整聲明

這是我的輸入文件:

<?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> 

這是我的XSLT的文件:

<?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> 

這是輸出文件的第一部分(其餘是正確的):

<?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"> 

而這是達成目標:

<?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"> 

正如您所看到的,兩個結果之間的唯一區別是「名稱空間」,我用它將輸入文件的其餘部分正確地傳輸到輸出文件。

如果我更改了(在xslt文件中)從「名稱空間」(佔位符)到期望的「xmlns」的值,則完整生成的文件已損壞。不同級別的標籤「的xmlns =」「」被放置在它不應該是:(

我只需要下面的模式,宣言提出的目標/輸出文件:

<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'一切都。

如果我寫了一遍「難」,請不要猶豫,給我一個反饋。 感謝& BR 基督教

+0

「XML聲明」是第一個元素之前的結構,比如'<?xml version ='1.0'?>'。您似乎實際上遇到名稱空間聲明的問題,而不是XML聲明。 –

+0

那麼問題是什麼,你的主題和文本談論他的XML聲明(例如'<?xml version =「1.0」?>'),你的最後一句話是談論改變目標'xmlns'。 –

+0

對不起,有點混淆關於「措辭」:) –

回答

0

移動的xmlns="urn:iso:std:iso:20022:tech:xsd:sdd:pacs.003.001.02"<xsl:stylesheet元素,那應該避免xmlns=""我想你會得到你用最後兩個模板創建的元素。