我正在完成一项学校任务,我已经完全被这一步困扰了。
我需要找到属性值落在两个数字之间的所有元素的总和,在这种情况下大于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 > 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>
答案 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 < 18])"/>
</xsl:template>
</xsl:stylesheet>