我有两个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>发布于 2013-01-19 22:27:47
我很确定你需要做的就是:
<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"/>https://stackoverflow.com/questions/14415133
复制相似问题