xslt - 我可以在 XSLT 中执行逐元素除法吗?

标签 xslt

我有一个数据结构,它看起来像:

<resultSet>
  <result>
    <numCorrect>1</numCorrect>
    <truthCorrect>4</truthCorrect>
  </result>
  <result>
    <numCorrect>2</numCorrect>
    <truthCorrect>4</truthCorrect>
  </result>
  <result>
    <numCorrect>3</numCorrect>
    <truthCorrect>5</truthCorrect>
  </result>
  <result>
    <numCorrect>5</numCorrect>
    <truthCorrect>6</truthCorrect>
  </result>
</resultSet>

我想计算 avg((result/numCorrect) div (result/truthCorrect)) ,但 XSLT 似乎不允许按元素划分,我如何计算这个平均值?

如果有帮助,我将使用 Saxon 作为 XSLT 2.0 处理器。

最佳答案

以下将做你想做的..

它使用递归并连续添加所有配对计算,最后除以结果数。

<xsl:template match = "/resultSet" >
  <xsl:variable name="TotalSum">
    <xsl:call-template name="calculator">
      <xsl:with-param name="currSum">0</xsl:with-param>
      <xsl:with-param name="count"><xsl:value-of select="count(result)"/></xsl:with-param>
    </xsl:call-template>
  </xsl:variable>
  <xsl:value-of select="$TotalSum div count(result)"/>
</xsl:template>

<xsl:template name="calculator">
  <xsl:param name="currSum"/>
  <xsl:param name="count"/>

  <xsl:variable name="actual" select="number(result[number($count)]/numCorrect)"/>
  <xsl:variable name="truth" select="number(result[number($count)]/truthCorrect)"/>

  <xsl:variable name="singleResult" select="number($actual div $truth)"/>

  <xsl:variable name="CycleSum" select="number($currSum + $singleResult)"/>

  <xsl:choose>
    <xsl:when test="number($count - 1) > 0 ">
      <xsl:call-template name="calculator">
        <xsl:with-param name="currSum"><xsl:value-of select="$CycleSum"/></xsl:with-param>
        <xsl:with-param name="count"><xsl:value-of select="number($count - 1)"/></xsl:with-param>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise><xsl:value-of select="$CycleSum"/></xsl:otherwise>
  </xsl:choose>
</xsl:template>

如果有你不明白的部分,请告诉我..

关于xslt - 我可以在 XSLT 中执行逐元素除法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239251/

相关文章:

xml - (xslt 1.0) 如何用 xml 中所有文本值中的一些字符串替换空格?

xml - 如何使用 XSLT 获取基于条件匹配的位置?

.net - 是否有办法确定哪个元素导致.net中的反序列化错误

html - 将图像从 XML 插入到 XSL 文档

xml - 使用 XSL 将 XML 转换为 HTML 后无数据显示

XML - 等于属性之一的字符串

c# - 基于 XSD 变化的动态 XSLT 生成

xml - XSLT 嵌套排序/for-each

xml - XSLT 错误 : Cannot find a template named X

javascript - 从 xml 文件获取一些信息的 xslt 和 xpath 在 JavaScript 中不起作用