2009-09-24 4 views
2

Может кто-нибудь помочь мне получить значение columndefinition/column/cssclass из цикла моей строки?Таблица XML/XSL в HTML

Итак, в моем XSL, я хочу, чтобы тянуть в CssClass для одной и той же позиции столбца во время моего «строк» ​​forloop, и положил его в мой < тде класса = «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

2

В качестве альтернативы решению Павла вы могли бы использовать в XSL :

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

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

Ключ будет индексировать <cssclass> узлами по их родительскому положению <column>. Для больших входов это позволяет работать быстрее.