2014-12-04 107 views
0

我有我需要用來創建貨幣對的貨幣代碼列表。下面是一個(簡化)例如在XSLT中創建嵌套循環

<?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,歐元兌美元, EURBRL,歐元兌英鎊(你的想法)

我可以循環的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> 

如果我在中間添加第二個,我會這樣做沒有得到任何輸出。我在這裏搜索,但沒有看到任何相關的東西。我試圖讓一些東西允許添加更多的貨幣代碼(如日元,瑞士法郎,泰銖),而無需手動創建配對/笛卡兒產品(這正是我現在所做的)

謝謝!

回答

0

for-each的內部,您當然可以擁有另一個絕對路徑<xsl:for-each select="/CurrencyLists/Currency">或相對於每個外部的一個,例如, <xsl:for-each select="../Currency">

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> 
+0

完美!這樣可行。非常感謝你。我不確定我在做什麼,這是不可見的。我有嵌套循環工作 – Jay 2014-12-04 22:45:02