首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在包含两个字符串的结果树片段(RTF)中找到最小的字符串,而不使用扩展函数,例如XSLT1.0中的node-set

如何在包含两个字符串的结果树片段(RTF)中找到最小的字符串,而不使用扩展函数,例如XSLT1.0中的node-set
EN

Stack Overflow用户
提问于 2017-10-09 20:43:23
回答 2查看 58关注 0票数 0

我有两个字符串变量,基本上存储货币代码,可以有美元或欧元或日元等值。

例如:如果变量boughtccy包含'JPY‘,变量soldccy包含'USD’,那么它应该返回一个字符串' boughtccy‘,表示它是名为boughtccy的变量实际上包含最小的货币。

类似地,如果变量boughtccy包含'EUR‘,变量soldccy包含'AUD’,那么它应该返回一个字符串' soldccy‘,表示名为soldccy的变量实际上包含最小的货币。

我已经写了下面的代码,除了在Altova XMLSpy中工作得很好。我有一个要求,它也应该在XMLSpy中工作。

代码如下:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2017-10-09 22:01:08

我认为您遇到的潜在问题是,在XSLT1.0中,字符串只能进行相等(或不等)比较,因此可以简单地执行<xsl:when test="$boughtccy > $soldccy">

在处理有限数量的字符串的特殊情况下,您可以定义一个包含所有可能的货币代码的变量,并使用字符串处理首先找到一个。

试试这个XSLT (当然,您必须修改$AllCurrencies才能包含所有可能的货币代码)。

代码语言:javascript
复制
<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)) &lt; string-length(substring-before($AllCurrencies, $soldccy))">BOUGHTCCY</xsl:when>
      <xsl:otherwise>SOLDCCY</xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
票数 0
EN

Stack Overflow用户

发布于 2017-10-10 01:16:06

我会使用system-property()和function-available()编写条件逻辑,针对不同的处理器以不同的方式实现这一点:

如果它是XSLT2.0,使用min(($boughtccy, $soldccy))

  • if它是带有节点集扩展的XSLT1.0,使用你已经放弃的排序技术using

  • otherwise
  • 。(在XSLT1.0中,除了创建节点集并对其进行排序外,无法比较"<“的两个字符串,这需要节点集扩展)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46646782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档