我有两个for-each语句迭代,我希望输出在表格中是垂直格式而不是水平格式。
目前输出:
a b c
1 2 3
我希望它输出:
a 1
b 2
c 3
有人可以帮忙吗?这是XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no"/>
<xsl:key name="names" match="Niche" use="."/>
<xsl:key name="niche" match="row" use="Niche"/>
<xsl:template match="/">
<table border="1">
<xsl:for-each select="//Niche[generate-id() = generate-id(key('names',.)[1])]">
<xsl:sort select="."/>
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
<td><tr></tr></td>
<xsl:for-each select="//row[generate-id(.)=generate-id(key('niche', Niche)[1])]">
<xsl:sort select="Niche"/>
<td>
<xsl:value-of select="count(key('niche', Niche))"/>
</td>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
示例XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl" ?>
<root>
<row>
<Niche>a</Niche>
</row>
<row>
<Niche>b</Niche>
</row>
<row>
<Niche>b</Niche>
</row>
<row>
<Niche>c</Niche>
</row>
<row>
<Niche>c</Niche>
</row>
<row>
<Niche>c</Niche>
</row>
</root>
答案 0 :(得分:2)
我很确定您需要做的就是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no"/>
<xsl:key name="niche" match="Niche" use="."/>
<xsl:template match="/">
<table border="1">
<xsl:for-each select="//Niche[generate-id(.)=generate-id(key('niche', .)[1])]">
<xsl:sort select="."/>
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="count(key('niche', .))"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
但请提供示例输入XML,以便我们验证。
在样本输入上,这会产生:
<table border="1">
<tr>
<td>a</td>
<td>1</td>
</tr>
<tr>
<td>b</td>
<td>2</td>
</tr>
<tr>
<td>c</td>
<td>3</td>
</tr>
</table>
要从最高到最低出现次数排序,您可以替换此行:
<xsl:sort select="."/>
用这个:
<xsl:sort select="count(key('niche', .))" order="descending" data-type="number"/>