2

次の形式のXMLファイルがあります。

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

この問題については、ブロックの「diff」をtime1の値と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 に答える