XSL joining 2组输出语句

XSL joining 2 group statements for output

使用 saxon,我正在尝试打印 sql 获取的 table 的总计,并以特定格式打印到 csv。 结构应该是这样的,我想得到的总数也可以在这里看到:

记住 col2 可以有任何字母,但 col4 只能有 a、b 或 c

输入的粗略概念:

<ROW> 
  <ROW[1]> 
    <col1>1</col1>
    <col2>a</col2>
    <col3>1</col3>
    <col4>a</col4>
  </ROW[1]> 
  <ROW[2]> 
    <col1>2</col1>
    <col2>a</col2>
    <col3>2</col3>
    <col4>a</col4>
  </ROW[2]> 
  <ROW[3]> 
    <col1>3</col1>
    <col2>a</col2>
    <col3>3</col3>
    <col4>a</col4>
  </ROW[3]> 
  <ROW[4]> 
    <col1>6</col1>
    <col2>b</col2>
    <col3>2</col3>
    <col4>a</col4>
  </ROW[4]> 
  ... 
</ ROW>

仅对 col1 进行总计应该很容易:

<xsl:template name = "totals">
  <xsl:for-each-group select = "//ROW" group-by="col2">
    <xsl:variable name="group_total">
      <xsl:value-of select="sum(current-group()/col1)"/>
      <xsl:value-of select="';'"/>
    </xsl:variable>
    <xsl:value-of select="'&#013;&#010;'"/>
  </xsl:for-each-group>
</xsl:template>

但是将 col3 的总计加入同一行的最佳方式是什么,比如 a 的总计在 a 的旁边? 我想通过相同的原则调用一个模板并将 col2 值传递给 运行 总数,但是当 col2 没有来自 col4

的值时就会出现问题

我不擅长想象输入结构,但如果您声明一个键 <xsl:key name="by-col4" match="ROW" use="col4"/>,然后在 for-each-group 中使用 sum(key('by-col4', current-grouping-key())/col3),它可能会给出您显示的结果。