我们有一个XSLT文件,可以创建以下标记:
<FinInstnId>
<BIC />
</FinInstnId>
或
<FinInstnId>
<BIC>BICABC</BIC>
</FinInstnId>
必须替换为:
<FinInstnId>
<Othr>
<Id>NOTPROVIDED</Id>
</Othr>
</FinInstnId>
如何更改当前的XSLT:
<xsl:template match="/">
<xsl:text disable-output-escaping="yes"><?xml version="1.0" encoding="utf-8"?></xsl:text>
<xsl:copy-of select="wt:Envelope/wt:Body/wt:MessageParts/*" />
</xsl:template>
必须更改的输入XML数据如下所示:
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :tech:xsd:pain.001.001.03" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd">-
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>PMB000053</MsgId>
<CreDtTm>2014-03-06T11:08:10</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>1000</CtrlSum>
<InitgPty>
<Nm>ABC</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>005320140306</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>false</BtchBookg>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>1000</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2014-03-06</ReqdExctnDt>
<Dbtr>
<Nm>TYPS B.V.</Nm>
<PstlAdr>
<Ctry>NL</Ctry>
<AdrLine>Street 123 Amsterdam</AdrLine>
<AdrLine>s</AdrLine>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>NL10ABNA5555555</IBAN>
</Id>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BIC>ABNANL2A</BIC>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>PAY003-563585</EndToEndId>
</PmtId>
etc.....
提前感谢您的意见。 理查德
答案 0 :(得分:0)
XML输入的Document标签的属性看起来很糟糕,你应该检查一下。
我不知道你为什么要手动编写XML标头,你甚至不应该想到这样的野兽。如果将输出格式设置为XML,则每个XSLT处理器都会自动添加它。
我使用了以下简化的XML:
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
<PmtInf>
<DbtrAgt>
<FinInstnId>
<BIC>ABNANL2A</BIC>
</FinInstnId>
</DbtrAgt>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
这个XSLT样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="Document/CstmrCdtTrfInitn/PmtInf/DbtrAgt"/>
</xsl:template>
<xsl:template match="DbtrAgt">
<Othr>
<Id>NOTPROVIDED</Id>
</Othr>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
<?xml version="1.0" encoding="utf-8"?>
<Othr>
<Id>NOTPROVIDED</Id>
</Othr>
这就是如何使用XSLT,它是模式匹配和函数式编程。