我有一个货币代码列表,我需要用它来创建货币对。以下是(简化)示例
<?xml version="1.0" encoding="UTF-8"?>
<CurrencyLists>
<Currency>USD</Currency>
<Currency>BRL</Currency>
<Currency>EUR</Currency>
<Currency>GBP</Currency>
</CurrencyLists>
我正在尝试将每种货币与其他货币相匹配,以创建一对(笛卡尔积)这样的货币 USDBRL,USDEUR,USDGBP,BRLUSD,BRLEUR,BRLGBP,EURUSD,EURBRL,EURGBP(你明白了)
我可以在xslt中循环并获取每个值,但我不确定如何第二次获取值 这是我的示例xslt代码
<xsl:template match="/">
<CurrencyPairs>
<Total>
<xsl:value-of select="count(CurrencyLists/Currency)"></xsl:value-of>
</Total>
<xsl:for-each select="CurrencyLists/Currency">
<!--<CurrencyPair><xsl:value-of select="."/></CurrencyPair>-->
<xsl:variable name="first" select="."/>
<first><xsl:value-of select="$first"/></first>
<!-- nested loop / cartesian here -->
</xsl:for-each>
</CurrencyPairs>
</xsl:template>
如果我在中间添加一个for-each,我就不会得到任何输出。我在这里搜索但没有看到任何相关的东西。我正在尝试制作一些允许添加更多货币代码的东西(如JPY,CHF,THB),而无需手工创建成对/笛卡尔产品(这就是我现在正在做的)
谢谢!
答案 0 :(得分:1)
你可以这么简单地做到这一点:
<xsl:template match="/">
<CurrencyPairs>
<xsl:variable name="allCurrencies" select="CurrencyLists/Currency" />
<Total>
<xsl:value-of select="count($allCurrencies)"></xsl:value-of>
</Total>
<xsl:for-each select="$allCurrencies">
<xsl:variable name="first" select="."/>
<xsl:for-each select="$allCurrencies[. != $first]">
<CurrencyPair>
<First>
<xsl:value-of select="$first" />
</First>
<Second>
<xsl:value-of select="." />
</Second>
</CurrencyPair>
</xsl:for-each>
</xsl:for-each>
</CurrencyPairs>
</xsl:template>
答案 1 :(得分:0)
在for-each
内,你当然可以拥有另一个绝对路径<xsl:for-each select="/CurrencyLists/Currency">
或者相对于外部for-each的一个,例如<xsl:for-each select="../Currency">
。