正确,变量不能在 XSLT 中修改。不要想着设置一个变量来反映上次看到的情况referenceNumber
。而是考虑可以应用于输入文档的测试。对于你的每一个payments
,你可以测试之前是否payment
有相同的referenceNumber
。例如...
这个 XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/payments">
<xsl:for-each select="payment">
<xsl:variable name="curReferenceNumber" select="referenceNumber"/>
<xsl:choose>
<xsl:when test="preceding-sibling::payment[referenceNumber = $curReferenceNumber]">
Same reference number.
</xsl:when>
<xsl:otherwise>
Different reference number.
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
对于此输入 XML:
<payments>
<payment>
<referenceNumber>150001</referenceNumber>
<amount>770.55</amount>
</payment>
<payment>
<referenceNumber>150001</referenceNumber>
<amount>880.66</amount>
</payment>
<payment>
<referenceNumber>150002</referenceNumber>
<amount>4500.00</amount>
</payment>
</payments>
将产生这个输出:
Different reference number.
Same reference number.
Different reference number.