2009-09-24 78 views
2

有人可以幫我從我的行循環中獲取columndefinition/column/cssclass的值嗎?XML/XSL到HTML表

所以,在我的XSL,我想我的「行」 for循環過程中的CssClass爲同一列的位置上拉,並把它放到我的< TD類=「PullItFromColumnDefition」 >

希望這是有道理的。任何人都可以幫我解決這個問題嗎?

謝謝。

我的XML看起來是這樣的:

<report> 
    <columndefinition> 
    <column> 
     <headertext>Test Column 1</headertext> 
     <cssclass>test1</cssclass> 
    </column> 
    <column> 
     <headertext>Test Column 2</headertext> 
     <cssclass>test2</cssclass> 
    </column> 
    </columndefinition> 
    <rows> 
    <row> 
     <column>3</column> 
     <column>11/04/2002</column> 
    </row> 
    <row> 
     <column>22</column> 
     <column>04/15/2003</column> 
    </row> 
    <row> 
     <column>134</column> 
     <column>04/15/2003</column> 
    </row> 
    <row> 
     <column>63</column> 
     <column>11/03/2004</column> 
    </row> 
    <row> 
     <column>65</column> 
     <column>11/03/2004</column> 
    </row> 
    <row> 
     <column>66</column> 
     <column>11/03/2004</column> 
    </row> 
    </rows> 
</report> 

這裏是我的XSL目前是:

<xsl:template match="/report"> 
    <html> 
    <body> 
    <h2>Report Sample</h2> 
    <table border="1"> 
     <thead> 
     <xsl:for-each select="columndefinition/column"> 
     <th><xsl:value-of select="headertext"/></th> 
     </xsl:for-each> 
     </thead> 
     <tbody> 
     <xsl:for-each select="rows/row"> 
     <tr> 
     <xsl:for-each select="column"> 
     <td><xsl:value-of select="."/></td> 
     </xsl:for-each> 
     </tr> 
     </xsl:for-each> 
     </tbody> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

回答

3
... 
<xsl:for-each select="column"> 
    <xsl:variable name="column-index" select="position()"/> 
    <td class="{/report/columndefinition/column[$column-index]/cssclass}"> 
    <xsl:value-of select="."/> 
    </td> 
</xsl:for-each> 
... 
+0

好又簡單,謝謝! – TehOne 2009-09-24 03:32:55

2

作爲替代帕維爾的解決方案,你可以使用一個XSL的關鍵字:

<xsl:key 
    name="kCssClass" 
    match="cssclass" 
    use="count(../preceding-sibling::column) + 1" 
/> 

<!-- later, in <column> context… --> 
<td class="{key('kCssClass', position())}"> 

密鑰將通過其父母<column>位置索引<cssclass>節點。對於大量投入,這有機會跑得更快。