我正在尝试制作一个按标签分组的计数表。 我想计算每个级别的“standings_level”在我的文件中的次数。
以下是我的XML文件的摘录:
<entries>
<entry>
<standings_levels>
<standings_level>4</standings_level>
</standings_levels>
</entry>
<entry>
<standings_levels>
<standings_level>3</standings_level>
</standings_levels>
</entry>
....
</entries>
我在xsl 2.0中尝试使用for-each-group
:
<xsl:for-each-group select="entries/entry/standings_levels/standings_level" group-by=".">
<tr>
<td>
<xsl:value-of select="current-grouping-key()"/>
</td>
<td>
<xsl:value-of select="count(current-group())"/>
</td>
</tr>
</xsl:for-each-group>
但它没有返回任何东西,我做错了什么?
这是我的完整XSL文件。
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="../include/template.xsl" />
<xsl:template match="/">
<html lang="en">
<xsl:call-template name="header" />
<body>
<xsl:call-template name="barreMenu" />
<div id="wrap">
<div class="container">
<table class="table table-bordered table-hover table-striped" id="tableTest">
<thead>
<tr>
<th>Label</th>
<th>Count</th>
</tr>
</thead>
<tbody>
<xsl:for-each-group select="entries/entry/standings_levels/standings_level" group-by=".">
<tr>
<td>
<xsl:value-of select="current-grouping-key()"/>
</td>
<td>
<xsl:value-of select="count(current-group())"/>
</td>
</tr>
</xsl:for-each-group>
</tbody>
</table>
</div><!-- /.container -->
</div>
<xsl:call-template name="footer" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
感谢您的帮助。
答案 0 :(得分:3)
发布最小但完整的代码示例,以便我们重现问题。当我使用Saxon 9.5和样式表
时<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--<xsl:include href="../include/template.xsl" />-->
<xsl:output indent="yes"/>
<xsl:template match="/">
<html lang="en">
<!--<xsl:call-template name="header" />-->
<body>
<!--<xsl:call-template name="barreMenu" />-->
<div id="wrap">
<div class="container">
<table class="table table-bordered table-hover table-striped" id="tableTest">
<thead>
<tr>
<th>Label</th>
<th>Count</th>
</tr>
</thead>
<tbody>
<xsl:for-each-group select="entries/entry/standings_levels/standings_level" group-by=".">
<tr>
<td>
<xsl:value-of select="current-grouping-key()"/>
</td>
<td>
<xsl:value-of select="count(current-group())"/>
</td>
</tr>
</xsl:for-each-group>
</tbody>
</table>
</div><!-- /.container -->
</div>
<!--<xsl:call-template name="footer" />-->
</body>
</html>
</xsl:template>
</xsl:stylesheet>
和输入
<entries>
<entry>
<standings_levels>
<standings_level>4</standings_level>
</standings_levels>
</entry>
<entry>
<standings_levels>
<standings_level>3</standings_level>
</standings_levels>
</entry>
....
</entries>
我得到了结果
<html lang="en">
<body>
<div id="wrap">
<div class="container">
<table class="table table-bordered table-hover table-striped" id="tableTest">
<thead>
<tr>
<th>Label</th>
<th>Count</th>
</tr>
</thead>
<tbody>
<tr>
<td>4</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
所以问题是由不同的输入(注意xmlns="..."
)或不同的XSLT代码引起的,而不是由你发布的代码引起的。