计算在 XSLT 中分组后的元素数

Count the number of elements after grouping in XSLT

提问人:MagicWorld 提问时间:11/17/2023 更新时间:11/18/2023 访问量:23

问:

我们有 XML:

<?xml version="1.0" encoding="utf-8"?>
<items>
    <element name="Name1" value="Text1"/>   
    <element name="Name1" value="Text3"/>
    <element name="Name1" value="Text4"/>   
    <element name="Name3" value="Text5"/>   
    <element name="Name3" value="Text8"/>   
</items>

我们需要按名称对元素进行分组并计算它们的数量。 输出 XML:

<?xml version="1.0"?>
<goods>
    <group name="Name1" sum="3">
        <item>Text1</item>
        <item>Text3</item>
        <item>Text4</item>
    </group>
    
    </group>
    <group name="Name3" sum="2">
        <item>Text5</item>
        <item>Text8</item>
    </group>
</goods>

我使用蒙克分组。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
    <xsl:key name="PC" match="element" use="@name"/>    
    <xsl:template match="items">
        <goods>
            <xsl:apply-templates select="element[generate-id(.) = generate-id(key('PC',@name))]"/>          
        </goods>
    </xsl:template>
    
    <xsl:template match="element">
        <group name="{@name}">
            <xsl:for-each select="key('PC',@name)">
                <item>
                    <xsl:value-of select="@value"/>
                </item>
            </xsl:for-each>         
        </group>
    </xsl:template>     
</xsl:stylesheet>

但是不知道分组后如何计算元素的数量。

XSLT 计数 分组

评论


答:

1赞 Daniel Haley 11/18/2023 #1

只需在 .count()key()

例。。。

<xsl:template match="element">
    <group name="{@name}" sum="{count(key('PC',@name))}">
        <xsl:for-each select="key('PC',@name)">
            <item>
                <xsl:value-of select="@value"/>
            </item>
        </xsl:for-each>         
    </group>
</xsl:template>