2

我有一个格式如下的 XML 文件:

<block>
 <name> blocky </name>
 <time1> 20 </time1>
 <time2> 17 </time2>
</block>
<block>
 <name> rocky </name>
 <time1> 3 </time1>
 <time2> 5 </time2>
</block>
...

为此,我将块的“差异”定义为 time1 的值 div 的值 time2 的值。

我需要做的是计算 diff > 10% 的块数,并找到一个具有最大 diff 的块并打印它的名称。

如何使用 XSLT 做到这一点?我不能更新变量,所以我不能使用计数器,也不能使用最大值。

谢谢你的帮助

4

1 回答 1

4

我假设所有块都是 <blocks> 元素的子元素。

您的问题的解决方案是:

<xsl:template match="blocks">
    <!-- Count number of blocks with diff greater than a number, in this case 10,
         because I do not know which is the maximum value (100%) that you can
         obtain with your specific data -->
    <xsl:value-of select="count(block[number(time1) div number(time2) >= 10])" />
    <!-- Find a block with maximum diff and print its name -->
    <xsl:for-each select="block">
        <xsl:sort select="number(time1) div number(time2)" data-type="number" order="descending" />
        <xsl:if test="position() = 1">
            <xsl:value-of select="name" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>
于 2013-02-20T11:12:20.100 回答