用条件XSLT计数

时间:2013-10-27 13:49:41

标签: xml xslt

我正在努力制造有条件的计数器。我的XML是:

<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])

但没有结果。我想过将变量用作计数器,但它们是不可变的。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用substring-beforesubstring-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>

答案 1 :(得分:0)

你几乎就在那里,诀窍是你需要将gt检查移动到谓词

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

选择您感兴趣的num元素,然后计算这些元素。