在从银行导入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>
答案 0 :(得分: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()节点。