2013-10-27 3 views
0

Я изо всех сил пытаюсь создать счетчик с условиями. Мой XML является:Подсчет с условием XSLT

<comments> 
    <comment> 
     <name>Jonh</name> 
     <num>4/7</num> 
    </comment> 
    <comment> 
     <name>Mary</name> 
     <num>2/9</num> 
    </comment> 
    <comment> 
     <name>Catie</name> 
     <num>12/2</num> 
    </comment> 
    <comment> 
     <name>Stefen</name> 
     <num>127/300</num> 
    </comment> 
</comments> 

Тег имеет следующую структуру:

number1/number2 

И я хочу знать, как часто number1 больше number2 во всех тегах

Я пробовал с кол-во:

count(tokenize(//comment/num, '/')[1] &gt; tokenize(//comment/num, '/')[2]) 

Но никаких результатов. Я думал об использовании переменной в качестве счетчика, но они неизменяемы. Как я могу это решить?

ответ

1

Вы можете использовать substring-before и substring-after для вычисления этих значений:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     number1 is greater than the number2 
     <xsl:value-of select="count(//num[substring-before(.,'/') &gt; substring-after(.,'/')])" /> times. 
    </xsl:template> 
</xsl:stylesheet> 
0

Ты почти там, как это, хитрость заключается в том, что вам нужно, чтобы переместить чек Gt предиката

count(//comment/num[tokenize(., '/')[1] &gt; tokenize(., '/')[2]]) 

выбрать вне num элементов вы заинтересованы, а затем рассчитывать те.

+0

Hum Я попытался использовать переменный, как это: "", но не возвращает результат! –

+0

@JohnSoart Вы уверены, что ваш процессор поддерживает XSLT 2.0, а не только 1.0? Функция 'tokenize' недоступна в 1.0, но, как было предложено в другом ответе, вы можете использовать' substring-before (., '/') 'И' substring-after (., '/') 'Вместо' tokenize (...) [1] 'и' [2] '. –

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