2014-12-04 2 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, 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> 

если я добавлю второй для каждого в середине, я делаю не получить какой-либо выход. Я искал здесь, но не видел ничего подходящего. Я пытаюсь сделать что-то, что позволяет добавлять дополнительные коды валют (например, JPY, CHF, THB), не создавая вручную пар/декартовую продукцию (это то, что я сейчас делаю)

спасибо !

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^