И. XSLT 1.0 Раствор
Это преобразование находит сумму и среднее значение всех чисел, за исключением тех, с минимальным значение - работает для набора узлов номеров любой длины:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vMin">
<xsl:for-each select="/*/num">
<xsl:sort data-type="number"/>
<xsl:if test="position()=1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="vNumsWithoutMin" select="/*/num[not(.=$vMin)]"/>
<xsl:variable name="vSumWithoutMin" select="sum($vNumsWithoutMin)"/>
<xsl:template match="/*">
<xsl:apply-templates select="$vNumsWithoutMin"/>
<xsl:value-of select="concat(' = ', $vSumWithoutMin)"/>
average = <xsl:value-of select=
"$vSumWithoutMin div count($vNumsWithoutMin)"/>
</xsl:template>
<xsl:template match="num">
<xsl:value-of select="."/>
<xsl:if test="not(position()=last())">
<xsl:text> + </xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Когда это применяется на прилагаемом документе XML:
<root>
<num>10</num>
<num>12</num>
<num>8</num>
</root>
разыскиваемый, правильный результат получается:
10 + 12 = 22
average = 11
II. Решение XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="text"/>
<xsl:variable name="vMin" select="min(/*/num/number(.))"/>
<xsl:variable name="vNumsSansMin"
select="/*/num[not(number() eq $vMin)]/number(.)"/>
<xsl:variable name="vAvgSansMin"
select="avg($vNumsSansMin)"/>
<xsl:template match="/*">
<xsl:sequence select=
"(for $i in 1 to count($vNumsSansMin)
return
($vNumsSansMin[$i],
if(not($i eq count($vNumsSansMin)))
then ' + '
else()
)
),
' = ', sum($vNumsSansMin)
"/>
average = <xsl:sequence select="$vAvgSansMin"/>
</xsl:template>
</xsl:stylesheet>
Это звучит как домашнее задание. SO люди склонны игнорировать вопросы типа «дайте мне ответ». Что вы пробовали? Покажите, что вы сделали и что не работает. –
@Jim Garrisson: Я не знаю, как делать арифметические операции в xslt !!! Это не моя домашняя работа. – brainless
@Jim Garrisson: моя проблема намного больше. Например, я дал небольшой фрагмент кода. и я не школьный ребенок !!! – brainless