【发布时间】:2011-03-07 10:15:00
【问题描述】:
我有这样的 XML:
<assessment name="Assessment">
<section name="Section1">
<item name="Item1-1"/>
<item name="Item1-2"/>
<item name="Item1-3"/>
<item name="Item1-4"/>
<item name="Item1-5"/>
</section>
<section name="Section2">
<item name="Item2-1"/>
<item name="Item2-2"/>
<item name="Item2-3"/>
<section name="Section2-2">
<item name="Item2-2-1"/>
<item name="Item2-2-2"/>
<item name="Item2-2-3"/>
<item name="Item2-2-4"/>
</section>
</section>
</assessment>
如您所见,评估可以包含部分。一个部分可以包含部分和/或项目。
我想使用 XSLT 递归计算评估和部分中的项目数。所以,我的转换应该输出如下内容:
Assessment: 12 items
Section1: 5 items
Section2: 7 items
Section2-2: 4 items
我从这个递归 XSLT 开始:
<stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<output method="text"/>
<template match="/assessment">
<xsl:for-each select="section">
<xsl:call-template name="sectionCount">
</xsl:call-template>
</xsl:for-each>
</template>
<template name="sectionCount">
<xsl:variable name="items" select="item"/>
<xsl:for-each select="section">
<xsl:call-template name="sectionCount">
</xsl:call-template>
</xsl:for-each>
<xsl:value-of select="count($items)"/>
</template>
</stylesheet>
我不知道该怎么做是将值传回并添加它们。这到底是怎么做到的?
【问题讨论】:
-
好问题 (+1)。请参阅我对 XSLT 2.0 解决方案的回答,该解决方案更通用,可用于一类类似(和更复杂)的问题。 :)