是否可以有一个for-each,其中计数器是属性值(不是节点列表)? 这是我想要做的,处理表中的colspan(不起作用):
<xsl:for-each select=".//tr[1]//td">
<xsl:choose>
<xsl:when test="@colspan">
<xsl:for-each select="@colspan">
<fo:table-column/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise><fo:table-column/></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
谢谢!
答案 0 :(得分:1)
在XSLT 2.0中:
<xsl:for-each select="1 to xs:integer(@colspan)">
<fo:table-column/>
</xsl:for-each>
在XSLT 1.0中:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="table[@colspan]">
<fo:table>
<xsl:call-template name="generate"/>
</fo:table>
</xsl:template>
<xsl:template name="generate">
<xsl:param name="pTimes" select="@colspan"/>
<xsl:if test="$pTimes > 0">
<fo:table-column/>
<xsl:call-template name="generate">
<xsl:with-param name="pTimes" select="$pTimes -1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<table colspan="3"/>
产生了想要的正确结果:
<fo:table xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:table-column/>
<fo:table-column/>
<fo:table-column/>
</fo:table>