感谢Niraj和{。}的帮助 hr_117我能够到达一个转换这个XML的XSL模板......
<bookings>
<entry>
<event>Christmas</event>
<attendees>2</attendees>
</entry>
<entry>
<event>Halloween</event>
<attendees>2</attendees>
</entry>
<entry>
<event>Easter</event>
<attendees>1</attendees>
</entry>
<entry>
<event>Easter</event>
<attendees>1</attendees>
</entry>
</bookings>
...进入此输出:
圣诞节:1个预订
万圣节:1个预订
复活节:2次预订
这是我的XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="data">
<xsl:apply-templates select="bookings"/>
</xsl:template>
<xsl:key name="bookings-within-period" match="bookings/entry" use="event" />
<xsl:template match="bookings">
<xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]">
<p>
<xsl:value-of select="concat(event,': ')" />
<xsl:value-of select="count(key('bookings-within-period', event))" />
<xsl:text> booking(s)</xsl:text>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我如何才能使用此函数计算attendees
的总和?
这是我需要的输出:
圣诞节:1个预订,2个与会者
万圣节:1个预订,2个与会者
复活节:2个预订,2个与会者
感谢任何可以提供帮助的人!
答案 0 :(得分:3)
使用key('bookings-within-period', event)
为您提供每个组中的entry
元素,然后sum(key('bookings-within-period', event)/attendees)
为您提供每个组中attendees
的总和。
您需要在for-each
内部执行此操作,其中每个组中的第一个entry
元素是上下文节点,如果不清楚的话。
答案 1 :(得分:2)
增强型XSLT如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="data">
<xsl:apply-templates select="bookings"/>
</xsl:template>
<xsl:key name="bookings-within-period" match="bookings/entry" use="event" />
<xsl:template match="bookings">
<xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]">
<p>
<xsl:value-of select="concat(event,': ')" />
<xsl:value-of select="count(key('bookings-within-period', event))" />
<xsl:text> booking(s), </xsl:text>
<xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" />
<xsl:text> attendee(s)</xsl:text>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我们有<xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" />
来汇总所有与会者