在查看了来自社区的大量很棒的建议后,第一次在这里发帖。
我在 XSLT 2.0 中有三个字段,都在同一级别(肩膀、膝盖和脚趾)。我需要根据肩膀和膝盖的独特组合输出脚趾的总和,所以我为每个组创建了两个嵌套的。在每个输出上,我还需要输出一个从 1 到肩膀和膝盖独特组合数量的增量器。
这个增量器是我遇到问题的地方。我最接近的是调用 position(),但如果我在最里面的组中调用它,计数器会在每个唯一的肩部重置。如果我在最外面的组中调用它,一个独特的肩膀内的每个膝盖都得到相同的值,然后它在每个独特的肩膀处重置。如果我完全在组之外调用它,它永远不会超过 1。我也尝试使用 xsl:number 、键等,但无济于事。在这些情况下,仍在打印正确的行数,但增量值正在查看单个的非分组值。
我读了一个关于模板之间“隧道”值的建议,但我无法让它工作,主要是因为我认为我没有正确调用模板(这些字段是同一级别而不是父级-孩子)。关于使这项工作与每个组或其他方式一起工作有什么想法吗?提前谢谢了。
示例 XML:
<bodies>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees1</knees>
<toes>1</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees2</knees>
<toes>2</toes>
</parts>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees2</knees>
<toes>10</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees1</knees>
<toes>10</toes>
</parts>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees1</knees>
<toes>9</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees2</knees>
<toes>8</toes>
</parts>
</bodies>
示例 XSLT:
<xsl:stylesheet exclude-result-prefixes="xsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:this="urn:this-stylesheet" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<xsl:for-each-group select="bodies/parts" group-by="shoulders">
<xsl:for-each-group select="current-group()" group-by="knees">
<xsl:value-of select="shoulders"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="knees"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="sum(current-group()/toes)"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>. </xsl:text>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
结果输出:
肩膀1, 膝盖1, 10, 1. 肩膀1, 膝盖2, 10, 2. 肩膀2, 膝盖2, 10, 1. 肩膀2, 膝盖1, 10, 2.
期望的输出:
肩膀1, 膝盖1, 10, 1. 肩膀1, 膝盖2, 10, 2. 肩膀2, 膝盖2, 10, 3. 肩膀2, 膝盖1, 10, 4.