获取两个数字之间的属性值

时间:2012-03-26 19:47:10

标签: xml xslt

我正在完成一项学校任务,我已经完全被这一步困扰了。

我需要找到属性值落在两个数字之间的所有元素的总和,在这种情况下大于9且小于18.我花了一个小时尝试不同的组合并完成它们的工作,我不能找到书中有这个的任何例子。有人可以帮助指出我做错了什么或者把我推向了正确的方向吗?

这是XML和XSLT的片段。

<course>
 <par holeNumber="1">4</par>
 <par holeNumber="2">4</par>
 <par holeNumber="3">5</par>
 <par holeNumber="4">3</par>
 <par holeNumber="5">4</par>
 <par holeNumber="6">4</par>
 <par holeNumber="7">5</par>
 <par holeNumber="8">3</par>
 <par holeNumber="9">4</par>
 <par holeNumber="10">4</par>
 <par holeNumber="11">5</par>
 <par holeNumber="12">4</par>
 <par holeNumber="13">3</par>
 <par holeNumber="14">4</par>
 <par holeNumber="15">5</par>
 <par holeNumber="16">4</par>
 <par holeNumber="17">3</par>
 <par holeNumber="18">4</par>
</course>

<xsl:template match="par">
<td><xsl:value-of select="." /></td>
<xsl:choose>
    <xsl:when test="./@holeNumber">
        <td class="sub"><xsl:value-of select="sum(@holeNumber &gt; 9)" /></td>
        <td class="final"></td>" /></td>
        <td class="final"></td>
    </xsl:when>
    <xsl:when test="1">

    </xsl:when>
    <xsl:otherwise>

    </xsl:otherwise>
</xsl:choose>

2 个答案:

答案 0 :(得分:2)

/course/par[@holeNumber <= 18 and 9 <= @holeNumber]

您可以在match中使用此功能,也可以只使用它来获取总和:

sum(/course/par[@holeNumber <= 18 and 9 <= @holeNumber])

注意:这是使用<=而非<同时获取18和9.如果您不想包含=,请将其移除。

答案 1 :(得分:1)

以下XSLT应用于样本输入时会产生所需的32

结果
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>

   <xsl:template match="/">
       <xsl:value-of select="sum(course/par[@holeNumber > 9 and @holeNumber &lt; 18])"/>
   </xsl:template>
</xsl:stylesheet>