抱歉我的英语不好。
如何在XSL 1.0中枚举已排序的记录? 我的代码片段:
...
<tbody>
<xsl:for-each select="/doc:resources/doc:record">
<xsl:sort select="@id"/>
<xsl:choose>
<xsl:when test="(position() mod 2) = 0">
<tr bgcolor="#C0C0C0">
<td>
<xsl:number format="1"/>
</td>
<td>
<xsl:value-of select="@id"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td>
<xsl:number format="1"/>
</td>
<td>
<xsl:value-of select="@id"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tbody>
...
结果屏幕不正确:
http://imglink.ru/pictures/01-04-12/92605b06b8b2c2670bba868c61288e9b.jpg
此致
答案 0 :(得分:2)
<xsl:for-each select="/doc:resources/doc:record">
<xsl:sort select="@id"/>
<tr>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">#C0C0C0</xsl:attribute>
</xsl:if>
<td>
<xsl:value-of select="position()" />
</td>
<td>
<xsl:value-of select="@id"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
答案 1 :(得分:0)
数字不正确的原因是xsl:number
不了解(动态)排序并使用原始未分类文档的结构。
这是一个完整,简短,正确的解决方案,使用position()
。除此之外,没有条件说明(xsl:choose
,xsl:when
,xsl:otherwise
,xsl:if`)全部使用:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:doc="xxx">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<html>
<table>
<xsl:apply-templates select="*">
<xsl:sort select="@id"/>
</xsl:apply-templates>
</table>
</html>
</xsl:template>
<xsl:template match="doc:record">
<xsl:variable name="vColor" select=
"substring('C0C0C0FFFFFF', 6*(position() mod 2)+1, 6)"/>
<tr bgcolor="#{$vColor}">
<td>
<xsl:value-of select="position()"/>
</td>
<td>
<xsl:value-of select="@id"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档(未提供任何内容!):
<doc:resources xmlns:doc="xxx">
<doc:record id="dadasd">
some value1
</doc:record>
<doc:record id="hkjhkhkhk">
some value2
</doc:record>
<doc:record id="xvxvxvxv">
some value3
</doc:record>
<doc:record id="afasf">
some value4
</doc:record>
<doc:record id="iuyiyuiy">
some value5
</doc:record>
</doc:resources>
产生了想要的正确结果:
<html xmlns:doc="xxx">
<table>
<tr bgcolor="#FFFFFF">
<td>1</td>
<td>afasf</td>
<td>
some value4
</td>
</tr>
<tr bgcolor="#C0C0C0">
<td>2</td>
<td>dadasd</td>
<td>
some value1
</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>3</td>
<td>hkjhkhkhk</td>
<td>
some value2
</td>
</tr>
<tr bgcolor="#C0C0C0">
<td>4</td>
<td>iuyiyuiy</td>
<td>
some value5
</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>5</td>
<td>xvxvxvxv</td>
<td>
some value3
</td>
</tr>
</table>
</html>