Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何计算XSLT中的条目数?_Xml_Xslt_Xslt 1.0_Symphony Cms - Fatal编程技术网

Xml 如何计算XSLT中的条目数?

Xml 如何计算XSLT中的条目数?,xml,xslt,xslt-1.0,symphony-cms,Xml,Xslt,Xslt 1.0,Symphony Cms,我是XSLT新手,我想为事件列表生成参与者计数。这是我的XML: <events> <event name="christmas"/> <event name="halloween"/> <event name="easter"/> <event name="easter"/> </events> 这可以通过XSLT以任何方式实现吗 谢谢你的帮助 试试这个样式表,它使用将事件元素按其@nam

我是XSLT新手,我想为
事件列表生成参与者计数。这是我的XML:

<events>
    <event name="christmas"/>
    <event name="halloween"/>
    <event name="easter"/>
    <event name="easter"/>
</events>
这可以通过XSLT以任何方式实现吗


谢谢你的帮助

试试这个样式表,它使用
事件
元素按其
@name
进行分组:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
    <!-- based on 
    http://stackoverflow.com/a/16509871/2115381 
    from Dimitre Novatchev
    --> 
    <xsl:key name="kEventVal" match="event" use="@name"/>

<xsl:template match="*">

            <xsl:apply-templates select=
         "event[generate-id() = generate-id(key('kEventVal',@name)[1])]"/>
</xsl:template>

<xsl:template match="event">
    <xsl:value-of select="@name"/>
    <xsl:text>: </xsl:text>
    <xsl:value-of select="count(key('kEventVal',@name))"/>
    <xsl:text> participant</xsl:text>
    <xsl:if test="count(key('kEventVal',@name)) > 1 ">
        <xsl:text>s</xsl:text>
    </xsl:if>
    <xsl:text>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

谢谢我会试试的。只有一个问题:
到底是做什么的?这是某种外部插件吗?这是两个问题1.这将生成一个映射,属性名作为键,所有匹配事件元素的列表作为值。(例如,看一看。2.不需要插件或扩展。这是xslt-1.0。非常感谢您的帮助。我花了一些时间阅读了这篇文章,我设法用一个稍微修改的代码来完成这篇文章。不过,我被最后一个细节卡住了,所以我发布了一篇文章。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
    <!-- based on 
    http://stackoverflow.com/a/16509871/2115381 
    from Dimitre Novatchev
    --> 
    <xsl:key name="kEventVal" match="event" use="@name"/>

<xsl:template match="*">

            <xsl:apply-templates select=
         "event[generate-id() = generate-id(key('kEventVal',@name)[1])]"/>
</xsl:template>

<xsl:template match="event">
    <xsl:value-of select="@name"/>
    <xsl:text>: </xsl:text>
    <xsl:value-of select="count(key('kEventVal',@name))"/>
    <xsl:text> participant</xsl:text>
    <xsl:if test="count(key('kEventVal',@name)) > 1 ">
        <xsl:text>s</xsl:text>
    </xsl:if>
    <xsl:text>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>
christmas: 1 participant
halloween: 1 participant
easter: 2 participants