2012-03-11 77 views
1

是否有可能有一個for-each計數器是屬性值(不是節點列表)? 這裏就是我試圖做的,在表處理合並單元格(不工作):通過參數值xsl循環

 <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> 

謝謝!

回答

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> 
+0

謝謝,我使用Xalan所以很遺憾沒有XSLT 2.0 – 2012-03-12 16:27:15