Xslt替换标记

Xslt替换标记,xslt,Xslt,我们有一个创建以下标记的XSLT文件: <FinInstnId> <BIC /> </FinInstnId> 或 这必须由以下内容取代: <FinInstnId> <Othr> <Id>NOTPROVIDED</Id> </Othr> </FinInstnId> 如何更改当前的XSLT,它看起来像: <xsl:templat

我们有一个创建以下标记的XSLT文件:

<FinInstnId> 
    <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>
<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">&lt;?xml version="1.0" encoding="utf-8"?&gt;</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.....
提前感谢您的投入。
Richard

XML输入的文档标记的属性看起来已损坏,您应该检查一下

我不知道为什么要手动编写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,我有你的例子。但是添加了我的标题会破坏翻译。