xslt - XSL 加入 2 个组语句以进行输出
问题描述
使用撒克逊语,我正在尝试从由 sql 获取的表中以特定格式打印到 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="'
'"/>
</xsl:for-each-group>
</xsl:template>
但是在同一行中加入 col3 总计的最佳方法是什么,例如 a 的总计位于 a 旁边?我认为调用模板并传递 col2 值以按照相同的原则运行总计,但是当 col2 没有来自 col4 的值时,就会出现问题
解决方案
我不擅长想象输入结构,但如果你声明一个键<xsl:key name="by-col4" match="ROW" use="col4"/>
然后sum(key('by-col4', current-grouping-key())/col3)
在你的内部使用for-each-group
它可能会给出你所显示的结果。
推荐阅读
- firebase - 如何在日期为 datenow 的 firebase 选择条件中查询
- c# - 在使用 MVVM 单击 ListView 项目内的按钮时选择 ListView 中的项目
- scrapy - 如何使用 Scrapyd 和 ScrapydWeb 在集群中分布蜘蛛?
- ios - 在 IOS 13 中,当 ViewController 未推送时,Google Map 相机位置未显示准确。附上两个屏幕截图
- assembly - 在 GAS .intel-syntax 程序集中的内存标签和寄存器上使用“偏移”和“[]”有什么区别?
- firebase - 为什么 Firebase 身份验证在没有 google dns 的情况下不起作用?
- python - python中所有可能的组合
- go - Golang 将 gob 字符串转换为接口
- r - 如何选择具有特定字符的列?
- javascript - 为什么我的严格不等函数不起作用