Xslt替换标签

时间:2014-04-14 12:55:13

标签: xslt

我们有一个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">&lt;?xml version="1.0" encoding="utf-8"?&gt;</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.....

提前感谢您的意见。 理查德

1 个答案:

答案 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,它是模式匹配和函数式编程。