2014-03-05 59 views
0

我需要在從銀行導入XML文檔之前將某些節點值轉換爲小寫字母。目前,除了我實際轉換的節點之外,所有值的輸出都會從原始節點中刪除。有什麼明顯的我在這裏失蹤?使用XSLT模板將一個Xml文檔轉換爲另一個文檔時的空節點值

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:iso20022="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" 
       exclude-result-prefixes="iso20022"> 
    <xsl:output method="xml" version="1.0" indent="yes"/> 

    <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" /> 
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> 

    <xsl:template match="iso20022:Document"> 
     <xsl:apply-templates select="*"/> 
    </xsl:template> 

    <xsl:template match="iso20022:RvslInd"> 
    <RvslInd> 
     <xsl:value-of select="translate(., $uppercase, $lowercase)" /> 
    </RvslInd> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:copy> 
     <xsl:apply-templates select="*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

以下是輸出的縮寫例如提取物,我得到:

<?xml version="1.0" encoding="UTF-8"?> 
<BkToCstmrStmtV02 xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02"> 
    <GrpHdr> 
     <MsgId /> 
     <CreDtTm /> 
     <MsgRcpt> 
     <Nm /> 
     <PstlAdr> 
      <AdrTp /> 
      <StrtNm /> 
      <BldgNb /> 
      <PstCd /> 
      <TwnNm /> 
      <CtrySubDvsn /> 
      <Ctry /> 
      <AdrLine /> 
     </PstlAdr> 
     </MsgRcpt> 
     <AddtlInf /> 
    </GrpHdr> 
    <Stmt> 
     <Id /> 
     <ElctrncSeqNb /> 
     <CreDtTm /> 
     <FrToDt> 
     <FrDtTm /> 
     <ToDtTm /> 
     </FrToDt> 
     <RptgSrc> 
     <Cd /> 
     </RptgSrc> 
     <Acct> 
     <Id> 
      <Othr> 
       <Id /> 
       <SchmeNm> 
        <Prtry /> 
       </SchmeNm> 
      </Othr> 
     </Id> 
     <Ccy /> 
     <Nm /> 
     <Svcr> 
      <FinInstnId> 
       <ClrSysMmbId> 
        <ClrSysId> 
        <Prtry /> 
        </ClrSysId> 
        <MmbId /> 
       </ClrSysMmbId> 
       <Nm /> 
      </FinInstnId> 
     </Svcr> 
     </Acct> 
     <Bal> 
     <Tp> 
      <CdOrPrtry> 
       <Cd /> 
      </CdOrPrtry> 
     </Tp> 
     <Amt /> 
     <CdtDbtInd /> 
     <Dt> 
      <Dt /> 
     </Dt> 
     </Bal> 
     <Bal> 
     <Tp> 
      <CdOrPrtry> 
       <Cd /> 
      </CdOrPrtry> 
     </Tp> 
     <Amt /> 
     <CdtDbtInd /> 
     <Dt> 
      <Dt /> 
     </Dt> 
     </Bal> 
     <Bal> 
     <Tp> 
      <CdOrPrtry> 
       <Cd /> 
      </CdOrPrtry> 
     </Tp> 
     <Amt /> 
     <CdtDbtInd /> 
     <Dt> 
      <Dt /> 
     </Dt> 
     </Bal> 
     <Bal> 
     <Tp> 
      <CdOrPrtry> 
       <Cd /> 
      </CdOrPrtry> 
     </Tp> 
     <Amt /> 
     <CdtDbtInd /> 
     <Dt> 
      <Dt /> 
     </Dt> 
     </Bal> 
     <TxsSummry> 
     <TtlNtries> 
      <NbOfNtries /> 
      <Sum /> 
      <TtlNetNtryAmt /> 
      <CdtDbtInd /> 
     </TtlNtries> 
     <TtlCdtNtries> 
      <NbOfNtries /> 
      <Sum /> 
     </TtlCdtNtries> 
     <TtlDbtNtries> 
      <NbOfNtries /> 
      <Sum /> 
     </TtlDbtNtries> 
     </TxsSummry> 
     <Ntry> 
     <Amt /> 
     <CdtDbtInd /> 
     <RvslInd xmlns="">false</RvslInd> 
     <Sts /> 
     <BookgDt> 
      <Dt /> 
     </BookgDt> 
     <ValDt> 
      <Dt /> 
     </ValDt> 
     <BkTxCd> 
      <Prtry> 
       <Cd /> 
       <Issr /> 
      </Prtry> 
     </BkTxCd> 
     <NtryDtls> 
      <TxDtls> 
       <Refs> 
        <EndToEndId /> 
       </Refs> 
      </TxDtls> 
     </NtryDtls> 
     <AddtlNtryInf /> 
     </Ntry> 
    </Stmt> 
</BkToCstmrStmtV02> 

回答

1

我猜(所提供的無輸入),你想改變這一點:

<xsl:template match="*"> 
    <xsl:copy> 
     <xsl:apply-templates select="*"/> 
    </xsl:copy> 
</xsl:template> 

到:

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

前者僅複製元素。後者複製一切 - 包括text()節點。

+0

完美,這正是我所需要的。謝謝! – ProNotion

相關問題