0

我正在完成支付集成转型。一个 xml 支付文件可以包含多个支付。因此会有不止一个 IBAN() 实例。我需要我的 XSLT 从一个或多个 . 下面的 XML。我已经用尽了所有选择。至于这个项目,这是我唯一需要答案的艺术。在下面的 XML 示例中,有两个 IBAN 实例。我已经尝试过for-each,在变量中存储和删除字符(最终在两个元素中连接值)......任何帮助都会很棒。这是示例数据,而不是实际付款数据。

<?xml version="1.0" encoding="utf-8"?> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <CstmrCdtTrfInitn>
      <GrpHdr>
         <MsgId>FILEREFT2</MsgId>
         <CreDtTm>2016-07-05T14:20:07</CreDtTm>
         <NbOfTxs>2</NbOfTxs>
         <CtrlSum>251000.50</CtrlSum>
         <InitgPty>
            <Nm>Test Client</Nm>
            <Id>
               <OrgId>
                  <Othr>
                     <Id>CLIENT ID</Id>
                  </Othr>
               </OrgId>
            </Id>
         </InitgPty>
      </GrpHdr>
      <PmtInf>
         <PmtInfId>BATCHREF</PmtInfId>
         <PmtMtd>TRF</PmtMtd>
         <NbOfTxs>1</NbOfTxs>
         <CtrlSum>251000.50</CtrlSum>
         <PmtTpInf>
            <SvcLvl>
               <Cd>URGP</Cd>
            </SvcLvl>
         </PmtTpInf>
         <ReqdExctnDt>2016-07-05</ReqdExctnDt>
         <Dbtr>
            <Nm>This Is My Debtor</Nm>
            <PstlAdr>
               <PstCd>ABCD1XXX</PstCd>
               <TwnNm>London</TwnNm>
               <CtrySubDvsn>Regent's Place</CtrySubDvsn>
               <Ctry>GB</Ctry>
               <AdrLine>10 A Street</AdrLine>
            </PstlAdr>
         </Dbtr>
         <DbtrAcct>
            <Id>
               <IBAN>GB-29NWBK 601613319268 19</IBAN>
            </Id>
            <Ccy>GBP</Ccy>
         </DbtrAcct>
         <DbtrAgt>
            <FinInstnId>
               <BIC>NWBKGB2L</BIC>
               <ClrSysMmbId>
                  <MmbId>601613</MmbId>
               </ClrSysMmbId>
               <PstlAdr>
                  <TwnNm>London</TwnNm>
                  <Ctry>GB</Ctry>
                  <AdrLine>London</AdrLine>
               </PstlAdr>
            </FinInstnId>
         </DbtrAgt>
         <CdtTrfTxInf>
            <PmtId>
               <InstrId>TRXREFT2</InstrId>
               <EndToEndId>TRXREFT2</EndToEndId>
            </PmtId>
            <Amt>
               <InstdAmt Ccy="GBP">251000.50</InstdAmt>
            </Amt>
            <ChrgBr>SHAR</ChrgBr>
            <CdtrAgt>
               <FinInstnId>
                  <BIC>MIDLGB22XXX</BIC>
                  <ClrSysMmbId>
                     <MmbId>404865</MmbId>
                  </ClrSysMmbId>
                  <PstlAdr>
                     <Ctry>GB</Ctry>
                  </PstlAdr>
               </FinInstnId>
            </CdtrAgt>
            <Cdtr>
               <Nm>My Creditor</Nm>
               <PstlAdr>
                  <TwnNm>Leeds</TwnNm>
                  <Ctry>GB</Ctry>
                  <AdrLine>Palace Square</AdrLine>
               </PstlAdr>
            </Cdtr>
            <CdtrAcct>
               <Id>
                  <IBAN>GB-32ESSE40486562136016</IBAN>
               </Id>
            </CdtrAcct>
            <RmtInf>
               <Ustrd>Free Text- This is a CHAPS payment 12345.</Ustrd>
            </RmtInf>
         </CdtTrfTxInf>          <CdtTrfTxInf>
            <PmtId>
               <InstrId>TRXREFT3</InstrId>
               <EndToEndId>TRXREFT3</EndToEndId>
            </PmtId>
            <Amt>
               <InstdAmt Ccy="GBP">1000.3</InstdAmt>
            </Amt>
            <ChrgBr>SHAR</ChrgBr>
            <CdtrAgt>
               <FinInstnId>
                  <BIC>MIDLGB22XXX</BIC>
                  <ClrSysMmbId>
                     <MmbId>404865</MmbId>
                  </ClrSysMmbId>
                  <PstlAdr>
                     <Ctry>GB</Ctry>
                  </PstlAdr>
               </FinInstnId>
            </CdtrAgt>
            <Cdtr>
               <Nm>My Creditor</Nm>
               <PstlAdr>
                  <TwnNm>Leeds</TwnNm>
                  <Ctry>GB</Ctry>
                  <AdrLine>Spire Apparel</AdrLine>
               </PstlAdr>
            </Cdtr>
            <CdtrAcct>
               <Id>
                  <IBAN>GB32ESSE404865621360 16</IBAN>
               </Id>
            </CdtrAcct>
            <RmtInf>
               <Ustrd>Free Text- This is a FASTER payment 12345.</Ustrd>
            </RmtInf>
         </CdtTrfTxInf>
      </PmtInf>     </CstmrCdtTrfInitn>  </Document>
4

1 回答 1

0

不确定您使用的是哪个版本的 XSLT,但这应该涵盖所有这些版本......

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:idk="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="idk:IBAN/text()">
    <xsl:value-of select="translate(.,'- ','')"/>
  </xsl:template>
  
</xsl:stylesheet>

它使用恒等变换translate().

Fiddle: http://xsltfiddle.liberty-development.net/jxNakAf

于 2020-11-12T00:10:45.210 回答