您好,我尝试学习XSLT转换,但是我想按类别进行分组,计算记录的数量(属于该类别和字段总和)。
例如,我的xml文件是:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<root>
<row>
<prid>1</prid>
<product>Name 1</product>
<category>Cat 1</category>
<price>23</price>
<qty>9</qty>
<sum>44</sum>
</row>
<row>
<prid>2</prid>
<product>Name 2</product>
<category>Cat 3</category>
<price>10</price>
<qty>2</qty>
<sum>22</sum>
</row>
</root>
我的xsl文件是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th style="text-align:left">Prid</th>
<th style="text-align:left">Product</th>
<th style="text-align:left">Category</th>
<th style="text-align:left">Price</th>
<th style="text-align:left">Qty</th>
<th style="text-align:left">Sum</th>
</tr>
<xsl:for-each-group select="/root/row" group-by="category">
<xsl:for-each select="current-group()">
<tr>
<td>
<xsl:value-of select="prid" />
</td>
<td>
<xsl:value-of select="product" />
</td>
<td>
<xsl:value-of select="category" />
</td>
<td>
<xsl:value-of select="price" />
</td>
<td>
<xsl:value-of select="count(current-group())" />
</td>
<td>
<xsl:value-of select="sum(current-group()/sum)" />
</td>
</tr>
</xsl:for-each>
</xsl:for-each-group>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果有人可以帮助我解决我的问题并向我解释。谢谢
答案 0 :(得分:1)
您没有非常清楚地说明所需的输出,也没有非常清楚地说明要获取的输出。您还没有告诉我们如何运行转换(XSLT处理器和调用方式)。
所写的代码正确。进行分组,然后不产生任何使分组结构可见的输出,这有点奇怪,但这也许正是您想要的。
您说您收到一条错误消息。您只告诉我们有关失败的摘要消息:在某处会有详细的消息告诉您失败的原因。如果您没有看到这些消息,则需要告诉我们您正在运行哪个处理器以及如何运行,因此我们可以告诉您在哪里可以找到它们。
以为您在不运行XSLT 2.0处理器时是一个常见错误。有人认为将“ version ='2.0'”放在样式表的顶部是您所要做的。但是,如果您将一个说“ version ='2.0'”的样式表发送给2001年编写的,仅能理解1.0的处理器,则它不会引起任何注意。