我有两个字符串变量,基本上存储货币代码,可以有美元或欧元或日元等值。
例如:如果变量boughtccy包含'JPY‘,变量soldccy包含'USD’,那么它应该返回一个字符串' boughtccy‘,表示它是名为boughtccy的变量实际上包含最小的货币。
类似地,如果变量boughtccy包含'EUR‘,变量soldccy包含'AUD’,那么它应该返回一个字符串' soldccy‘,表示名为soldccy的变量实际上包含最小的货币。
我已经写了下面的代码,除了在Altova XMLSpy中工作得很好。我有一个要求,它也应该在XMLSpy中工作。
代码如下:
xsl:variable name="smallerccy">
<xsl:variable name="nodes">
<node>
<xsl:value-of select="$boughtccy"/>
</node>
<node>
<xsl:value-of select="$soldccy"/>
</node>
</xsl:variable>
<xsl:for-each select="common:node-set($nodes)/*">
<xsl:sort select="."/>
<xsl:choose>
<xsl:when test="position()=1 and .=$boughtccy">BOUGHTCCY</xsl:when>
<xsl:when test="position()=1 and .=$soldccy">SOLDCCY</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:variable>如何在不使用exslt:node-set()函数的情况下实现这一点?我不能使用xslt 2.0。
发布于 2017-10-09 22:01:08
我认为您遇到的潜在问题是,在XSLT1.0中,字符串只能进行相等(或不等)比较,因此可以简单地执行<xsl:when test="$boughtccy > $soldccy">
在处理有限数量的字符串的特殊情况下,您可以定义一个包含所有可能的货币代码的变量,并使用字符串处理首先找到一个。
试试这个XSLT (当然,您必须修改$AllCurrencies才能包含所有可能的货币代码)。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="AllCurrencies" select="'AUS|EUR|JPY|USD'" />
<xsl:param name="boughtccy" select="'JPY'" />
<xsl:param name="soldccy" select="'USD'" />
<xsl:template match="/">
<xsl:choose>
<xsl:when test="string-length(substring-before($AllCurrencies, $boughtccy)) < string-length(substring-before($AllCurrencies, $soldccy))">BOUGHTCCY</xsl:when>
<xsl:otherwise>SOLDCCY</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>发布于 2017-10-10 01:16:06
我会使用system-property()和function-available()编写条件逻辑,针对不同的处理器以不同的方式实现这一点:
如果它是XSLT2.0,使用min(($boughtccy, $soldccy))
https://stackoverflow.com/questions/46646782
复制相似问题