Xml 如何计算XSLT中的条目数?
我是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
事件列表生成参与者计数。这是我的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> </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> </xsl:text>
</xsl:template>
</xsl:stylesheet>
christmas: 1 participant
halloween: 1 participant
easter: 2 participants