经过大量的研究和大量测试后,我开始转换我的xml文件。
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd" xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd pain.001.001.03.ch.02.xsd">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>MsgId-C001</MsgId>
<CreDtTm>2016-08-01T00:00:00</CreDtTm>
<NbOfTxs>5</NbOfTxs>
<CtrlSum>4000.00</CtrlSum>
<InitgPty>
<Nm>Max Muster</Nm>
<CtctDtls>
<Nm>PF Testplattform</Nm>
<Othr>Version 2.1</Othr>
</CtctDtls>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>PmtInfId-C001-01</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>false</BtchBookg>
<ReqdExctnDt>2017-03-01</ReqdExctnDt>
<Dbtr><Nm>Max Muster</Nm></Dbtr>
<DbtrAcct>
<Id><IBAN>CH6309000000250097798</IBAN></Id>
<Tp><Prtry>NOA</Prtry></Tp>
</DbtrAcct>
<DbtrAgt>
<FinInstnId><BIC>POFICHBEXXX</BIC></FinInstnId>
</DbtrAgt>
<ChrgBr>CRED</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<InstrId>InstrId-C001-01-01</InstrId>
<EndToEndId>EndToEndId-C001-01-01</EndToEndId>
</PmtId>
<PmtTpInf>
<LclInstrm><Prtry>CH01</Prtry></LclInstrm>
</PmtTpInf>
<Amt><InstdAmt Ccy="EUR">1000.00</InstdAmt></Amt>
<Cdtr><Nm>C001</Nm></Cdtr>
<CdtrAcct><Id>
<Othr><Id>010391391</Id></Othr>
</Id></CdtrAcct>
<RmtInf><Strd>
<CdtrRefInf><Ref>120000000000234478943216899</Ref></CdtrRefInf>
</Strd></RmtInf>
</CdtTrfTxInf>
</PmtInf>
<PmtInf>
<PmtInfId>PmtInfId-C001-02</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>false</BtchBookg>
<ReqdExctnDt>2017-03-01</ReqdExctnDt>
<Dbtr><Nm>Max Muster</Nm></Dbtr>
<DbtrAcct>
<Id><IBAN>CH6309000000250097798</IBAN></Id>
<Tp><Prtry>NOA</Prtry></Tp>
</DbtrAcct>
<DbtrAgt>
<FinInstnId><BIC>POFICHBEXXX</BIC></FinInstnId>
</DbtrAgt>
<ChrgBr>CRED</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<InstrId>InstrId-C001-02-01</InstrId>
<EndToEndId>EndToEndId-C001-02-01</EndToEndId>
</PmtId>
<PmtTpInf>
<LclInstrm><Prtry>CH01</Prtry></LclInstrm>
</PmtTpInf>
<Amt><InstdAmt Ccy="CHF">3000.00</InstdAmt></Amt>
<Cdtr><Nm>C001</Nm></Cdtr>
<CdtrAcct><Id>
<Othr><Id>010391391</Id></Othr>
</Id></CdtrAcct>
<RmtInf><Strd>
<CdtrRefInf><Ref>120000000000234478943216899</Ref></CdtrRefInf>
</Strd></RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
使用此XSLT文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ld="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd"
exclude-result-prefixes="ld"
ld:type = "GenericAccountIdentification1-CH" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="ld:Document">
<xsl:copy>
<xsl:for-each-group select="ld:CstmrCdtTrfInitn/ld:PmtInf/ld:CdtTrfTxInf" group-by="ld:PmtId/ld:InstrId">
<xsl:element name="Paiement">
<xsl:for-each select="current-group()">
<xsl:element name="MessageId">
<xsl:value-of select="../../ld:GrpHdr/ld:MsgId"/>
</xsl:element>
<xsl:element name="dateCredit">
<xsl:value-of select="../../ld:GrpHdr/ld:CreDtTm"/>
</xsl:element>
<xsl:element name="NbOfTxs">
<xsl:value-of select="../../ld:GrpHdr/ld:NbOfTxs"/>
</xsl:element>
<xsl:element name="CtrlSum">
<xsl:value-of select="../../ld:GrpHdr/ld:CtrlSum"/>
</xsl:element>
<xsl:element name="Ident">
<xsl:value-of select="../../ld:GrpHdr/ld:InitgPty/ld:Nm"/>
</xsl:element>
<xsl:element name="GroupePaiementsId">
<xsl:value-of select="../ld:PmtInfId"/>
</xsl:element>
<xsl:element name="PaiementType">
<xsl:value-of select="../ld:PmtMtd"/>
</xsl:element>
<xsl:element name="PaiementDate">
<xsl:value-of select="../ld:ReqdExctnDt"/>
</xsl:element>
<xsl:element name="Debiteur">
<xsl:value-of select="../ld:Dbtr/ld:Nm"/>
</xsl:element>
<xsl:element name="CompteDebiteur">
<xsl:value-of select="../ld:DbtrAcct/Id/ld:IBAN"/>
</xsl:element>
<xsl:element name="DebitCredit">
<xsl:value-of select="../ld:ChrgBr"/>
</xsl:element>
<xsl:element name="PaiementId">
<xsl:value-of select="current-grouping-key()"/>
</xsl:element>
<xsl:element name="Reference">
<xsl:value-of select="ld:RmtInf/ld:Strd/ld:CdtrRefInf/ld:Ref"/>
</xsl:element>
<xsl:element name="MontantCcy">
<xsl:value-of select="ld:Amt/ld:InstdAmt/@Ccy"/>
</xsl:element>
<xsl:element name="Montant">
<xsl:value-of select="ld:Amt/ld:InstdAmt"/>
</xsl:element>
<xsl:element name="CompteCredite">
<xsl:value-of select="ld:CdtrAcct/Id/ld:Othr/Id"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
我获得:
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Paiement xmlns="">
<MessageId>MsgId-C001</MessageId>
<dateCredit>2016-08-01T00:00:00</dateCredit>
<NbOfTxs>5</NbOfTxs>
<CtrlSum>4000</CtrlSum>
<Ident>Max Muster</Ident>
<GroupePaiementsId>PmtInfId-C001-01</GroupePaiementsId>
<PaiementType>TRF</PaiementType>
<PaiementDate>2017-03-01</PaiementDate>
<Debiteur>Max Muster</Debiteur>
<CompteDebiteur/>
<DebitCredit>CRED</DebitCredit>
<PaiementId>InstrId-C001-01-01</PaiementId>
<Reference>120000000000234478943216899</Reference>
<MontantCcy>EUR</MontantCcy>
<Montant>1000</Montant>
<CompteCredite/>
</Paiement>
<Paiement xmlns="">
<MessageId>MsgId-C001</MessageId>
<dateCredit>2016-08-01T00:00:00</dateCredit>
<NbOfTxs>5</NbOfTxs>
<CtrlSum>4000</CtrlSum>
<Ident>Max Muster</Ident>
<GroupePaiementsId>PmtInfId-C001-02</GroupePaiementsId>
<PaiementType>TRF</PaiementType>
<PaiementDate>2017-03-01</PaiementDate>
<Debiteur>Max Muster</Debiteur>
<CompteDebiteur/>
<DebitCredit>CRED</DebitCredit>
<PaiementId>InstrId-C001-02-01</PaiementId>
<Reference>120000000000234478943216899</Reference>
<MontantCcy>CHF</MontantCcy>
<Montant>3000</Montant>
<CompteCredite/>
</Paiement>
</Document>
但最后一个元素没有价值。它来自:
<CdtrAcct><Id>
<Othr><Id>010391391</Id></Othr>
</Id></CdtrAcct>
在XSD文件中,有几个不同类型的元素'Othr',我想要这个:
Document / CstmrCdtTrfInitn / PmtInf / CdtTrfTxInf / CdtrAcct / Id / Othr,类型为GenericAccountIdentification1-CH。
我尝试:
<xsl:param name="someType">xsd:GenericAccountIdentification1-CH"/></xsl:param>
<xsl:variable name="typeOthr" select="document($someType)"/>
...
<xsl:value-of select="ld:CdtrAcct/Id/ld:$typeOthr/Id"/>
我收到错误:意外的令牌'$ typeOther / Id'
我该怎么办?
答案 0 :(得分:0)
如果要填充该空元素,就像使用其他元素一样,那么只需使用
即可 <xsl:element name="CompteCredite">
<xsl:value-of select="ld:CdtrAcct/ld:Id/ld:Othr/ld:Id"/>
</xsl:element>