Главная -> XML&... -> XSLT в примерах 
>> Страница 39 << | Назад | Вперед | Содержание | Указатель

Функция sum() суммирует все числа из выбранного множества узлов. В преобразовании 1 суммируются все числа, а в преобразовании 2 — только нечетные.

Преобразование 1

Исходный XML
<source>

<number>1</number>
<number>3</number>
<number>4</number>
<number>17</number>
<number>8</number>
<number>11</number>

</source>

Результат
1 + 3 + 4 + 17 + 8 + 11 = 44

Представление HTML
1 + 3 + 4 + 17 + 8 + 11 = 44
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:for-each select="//number">
          <xsl:value-of select="."/>
          <xsl:choose>
               <xsl:when test="position()=last()">
                    <xsl:text> = </xsl:text>
               </xsl:when>
               <xsl:otherwise>
                    <xsl:text> + </xsl:text>
               </xsl:otherwise>
          </xsl:choose>
     </xsl:for-each>
     <xsl:value-of select="sum(//number)"/>
</xsl:template>


</xsl:stylesheet>



Преобразование 2

Исходный XML
<source>

<number>1</number>
<number>3</number>
<number>4</number>
<number>17</number>
<number>8</number>
<number>11</number>

</source>

Результат
1 + 3 + 17 + 11 = 32

Представление HTML
1 + 3 + 17 + 11 = 32
Преобразование XSLT
<xsl:stylesheet version = '1.0'
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:template match="/">
     <xsl:for-each select="//number">
          <xsl:variable name="number" select="."/>
          <xsl:if test="$number mod 2">
               <xsl:value-of select="."/>
               <xsl:choose>
                    <xsl:when test="position()=last()">
                         <xsl:text> = </xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                         <xsl:text> + </xsl:text>
                    </xsl:otherwise>
               </xsl:choose>
          </xsl:if>
     </xsl:for-each>
     <xsl:value-of select="sum(//number[text() mod 2 = true()])"/>
</xsl:template>


</xsl:stylesheet>

Raleigh.ru Copyright © 2002