xslt vergleicht zwei verschiedene Knoten und kombiniert sie dann
Ich habe eine Anforderung, bei der ich den Differenzbetrag angeben muss (<TotalAmount>
) basiert auf zwei verschiedenen Werten, die sich in verschiedenen Abschnitten befinden.
<TXLife xmlns="http://ACORD.org/Standards/Life/2">
<TXLifeRequest>
<FundCode>LTRW00</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Cr</ReversalInd>
<TotalAmount>1600</TotalAmount>
</TXLifeRequest>
<TXLifeRequest>
<FundCode>LTRW00</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Dr</ReversalInd>
<TotalAmount>350</TotalAmount>
</TXLifeRequest>
<TXLifeRequest>
<FundCode>LUL500</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Cr</ReversalInd>
<TotalAmount>500</TotalAmount>
</TXLifeRequest>
<TXLifeRequest>
<FundCode>LUL500</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Dr</ReversalInd>
<TotalAmount>800</TotalAmount>
</TXLifeRequest>
</TXLife>
Aus der obigen XML-Datei ergibt sich das Kriterium zur Ermittlung des Differenzbetrags<FundCode>
und<AccountNumber>
. Wenn irgendwelche Abschnitte dasselbe haben<FundCode>
und<AccountNumber>
abrufen<TotalAmount>
und finde den Unterschied.
Zum Beispiel von oben xml: -
Es gibt zwei Abschnitte mit dem gleichen<fundcode>
und<Accountnumber>
mit LTRW00 und 34142. Jetzt ist der Unterschied von<TotalAmount>
ist 1250 (1600 - 250). Ich muss diese Logik auch in anderen Abschnitten wiederholen.
Die endgültige Ausgabe-XML sollte also so aussehen:
<TXLife xmlns="http://ACORD.org/Standards/Life/2">
<TXLifeRequest>
<FundCode>LTRW00</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Cr</ReversalInd>
<TotalAmount>1250</TotalAmount>
</TXLifeRequest>
<TXLifeRequest>
<FundCode>LUL500</FundCode>
<AccountNumber>34142</AccountNumber>
<ReversalInd>Dr</ReversalInd>
<TotalAmount>300</TotalAmount>
</TXLifeRequest>
</TXLife>
Und auch wenn Sie das beobachten<ReversalInd>
Das heißt, CR / DR sollte basierend auf dem höchsten TotalAmount-Wert identifiziert werden.
Ich habe das xslt unten angewendet aber keine ausgabe. Irgendwelche Ideen, wie man in xslt 1.0 implementiert. Sehr geschätzt.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:ns="http://ACORD.org/Standards/Life/2">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ns:TXLife/ns:TXLifeRequest">
<xsl:element name="TXLife" namespace="http://ACORD.org/Standards/Life/2">
<xsl:call-template name="balance">
<xsl:with-param name="total" select="ns:TotalAmount"></xsl:with-param>
</xsl:call-template>
<xsl:copy-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template name="balance">
<xsl:param name="total"></xsl:param>
<xsl:variable name="reminder" select="0"></xsl:variable>
<xsl:variable name="val1">
<xsl:value-of select="$total[1]"/>
</xsl:variable>
<xsl:variable name="val2">
<xsl:value-of select="$total[position() > 1]"/>
</xsl:variable>
<xsl:if test="$val1 > $val2">
<remainingAmount><xsl:value-of select="$val1 - $val2"/></remainingAmount>
</xsl:if>
</xsl:template>
</xsl:stylesheet>