Мне потребуется помощь по преобразованию шаблонов идентичности в xslt 2.0, я пробовал это несколько часов, но не смог этого добиться.
Input
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>16</MsgId>
</GrpHdr>
<PmtInf>
<PmtInfId>161</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>false</BtchBookg>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>0.01</CtrlSum>
<ChrgBr>SL</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<InstrId>EFT</InstrId>
</PmtId>
<Purp>
<Prtry>DEP</Prtry>
</Purp>
<RmtInf>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Cd>SOAC</Cd>
</CdOrPrtry>
</Tp>
<Nb>643525145</Nb>
<RltdDt>2018-01-01-07:00</RltdDt>
</RfrdDocInf>
<RfrdDocAmt>
<DuePyblAmt Ccy="EUR">0.01</DuePyblAmt>
<RmtdAmt Ccy="EUR">0.01</RmtdAmt>
</RfrdDocAmt>
<CdtrRefInf>
<Ref>643525145</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
выход
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>16</MsgId>
</GrpHdr>
<PmtInf>
<PmtInfId>161</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<BtchBookg>false</BtchBookg>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>0.01</CtrlSum>
<ChrgBr>SL</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<InstrId>EFT</InstrId>
</PmtId>
<Purp>
<Prtry>DEP</Prtry>
</Purp>
<RmtInf>
<Ustrd>643525145</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
Если xpath / Document / CstmrCdtTrfInitn / PmtInf / CdtTrfTxInf / RmtInf / Strd / RfrdDocInf / Nb и / Document / CstmrCdtTrfInitn / PttInf / rttff то же самое, тогда мне понадобится вывод, как указано выше. Если они не совпадают, то xslt должен вернуть входные данные без изменений.
Я пробовал этот код xslt, но он не работал.
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match='@* | node()'>
<xsl:copy>
<xsl:apply-templates select='@* | node()'/>
</xsl:copy>
<!--/xsl:if-->
</xsl:template>
<xsl:template match='Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/RmtInf'>
<xsl:if test="Strd/RfrdDocInf/Nb=Strd/CdtrRefInf/Ref">
<xsl:copy>
<Ustrd>
<xsl:value-of select="Strd/CdtrRefInf/Ref"/>
</Ustrd>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Пожалуйста, кто-нибудь может помочь мне достичь результата, спасибо.