Xslt替换标记
我们有一个创建以下标记的XSLT文件:Xslt替换标记,xslt,Xslt,我们有一个创建以下标记的XSLT文件: <FinInstnId> <BIC /> </FinInstnId> 或 这必须由以下内容取代: <FinInstnId> <Othr> <Id>NOTPROVIDED</Id> </Othr> </FinInstnId> 如何更改当前的XSLT,它看起来像: <xsl:templat
<FinInstnId>
<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>
<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.....
必须更改的输入XML数据如下所示:
<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>
<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.....
提前感谢您的投入。
RichardXML输入的文档标记的属性看起来已损坏,您应该检查一下 我不知道为什么要手动编写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>
输出:
这就是XSLT的使用方式,它是模式匹配和函数编程。如果您不显示XSLT,我们如何知道要更改XSLT的哪一部分?共享您的输入XML和XSLT…谢谢,我已经添加了输入数据和当前XSLT。您的解决方案看起来像另一个设计原则。更新了答案以使用您提供的XML源代码和XSLT样式表,这些样式表适用于您发布的内容。我不认为这是另一个设计原则,它是XSLT的设计原则。谢谢你,CoDEmanX,我有你的例子。但是添加了我的标题会破坏翻译。