Thanks for the help. I later learned I also had to test for a dollar sign as
well as empty cells. This is what I'm using. It works, but there may be a
more compact/elegant way to do it.
sc
<xsl:template name="total-value">
<xsl:param name="price"/>
<xsl:param name="result" select="0"/>
<xsl:param name="nodollarsign" select="translate($price,'$','')"/>
<xsl:choose>
<xsl:when test="$price and number($price) = number($price)">
<xsl:call-template name="total-value">
<xsl:with-param name="price" select="$price[position()
> 1]"/>
<xsl:with-param name="result" select="$result +
$price"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$nodollarsign">
<xsl:call-template name="total-value">
<xsl:with-param name="price" select="$price[position()
> 1]"/>
<xsl:with-param name="result" select="$result +
$nodollarsign"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$price and number($price) != number($price)">
<xsl:call-template name="total-value">
<xsl:with-param name="price" select="$price[position()
> 1]"/>
<xsl:with-param name="result" select="$result"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$result"/></xsl:otherwise>
</xsl:choose>
</xsl:template>