XSLT - 从多次出现的元素中删除空格和连字符
XSLT - Remove spaces and hyphens from element that shows up more than once
我正在进行支付整合转型。一个 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>
不确定您使用的是哪个版本的 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>
它使用 identity transform and translate()
.
我正在进行支付整合转型。一个 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>
不确定您使用的是哪个版本的 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>
它使用 identity transform and translate()
.