2013-08-05 40 views
-1

​​列的顯示數我想用的for-each循環來顯示基於的計數屬性值<TD>列。有人可以幫助我實現它嗎?我是XSLT開發新手。基於屬性值使用XSLT

XML節點:
<行計數= 「72」 >

編輯:計數 - 這裏稱爲爲列數行中

預先感謝。

+0

XSLT 1.0或2.0?在2.0中更容易。 –

+0

它的1.0,感謝如果你可以發佈這兩個解決方案。謝謝 – user2218497

+0

你的問題不清楚 - 至少對我來說:你想顯示72列或示例顯示一列值爲「72」顯示?爲什麼元素名爲row? – Andreas

回答

1

在XSLT 2.0中,您可以使用「到」運營商,並簡單地說

<xsl:template match="row"> 
    <xsl:variable name="theRow" select="." /> 
    <tr> 
    <xsl:for-each select="1 to @count"> 
     <td><!-- insert cell contents here --></td> 
    </xsl:for-each> 
    </tr> 
</xsl:template> 

for-each.將是當前,所以如果你需要訪問你需要的row元素將其保存在一個變量中。

+0

不幸的是,問題是關於XSLT 1.0,儘管如此。 – Tomalak

+0

事實上,我只是爲了完整而包括這個,因爲@ user2218497要求「兩種解決方案」 - 您的答案應該是公認的答案。 –

+0

我總是喜歡OP不會評論他們得到的答案。古典指標,這只不過是一個機械土耳其人的問題。 : - / – Tomalak

1

如果您的計數不在千位,可以通過簡單的遞歸來完成。迭代是不可能的,因爲XSLT中沒有可修改的變量。

<xsl:template match="row[@count &gt; 0]"> 
    <xsl:call-template name="new-td"> 
    <xsl:with-param name="count" select="@count" /> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="new-td"> 
    <xsl:param name="count" select="0" /> 

    <xsl:if test="$count"> 
    <!-- create current cell --> 
    <td> 
     <!-- contents... --> 
    </td> 

    <!-- recursive step: create next cell --> 
    <xsl:call-template name="new-td"> 
     <xsl:with-param name="count" select="$count - 1" /> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

根據您的XSLT處理器是多麼的聰明是它會優化到這個幕後迭代循環,使堆棧溢出錯誤是不太可能發生,不管$count有多高。試着用一個非常高的數字來找出你的XSLT處理器如何反應。

IBM DeveloperWorks上的推薦閱讀:Use recursion effectively in XSL,尤其是「遞歸示例2:遍歷數字」