2017-09-25 122 views
0

我需要使用XSLT將html表格轉換爲另一個html表格。我的目標是將表格單元格顏色修改爲Zebra樣式。字面上的斑馬樣式意味着一個接一個地改變表格行的顏色。XSLT - 基於定位添加屬性值

對於簡單的表格(有mo行合併),我使用了錶行的行位置值,並改變了奇數行位置的顏色。當表格中存在單元格合併時,問題就出現了。這種情況下,我不能使用行位置值的模塊值,而是必須考慮行跨度值並製作一些邏輯。

下面是一個例子,

<table> 
    <tbody> 
     <tr> 
      <td rowspan="2">111</td> 
      <td>222</td> 
     </tr> 
     <tr> 
      <td>333</td> 
     </tr> 
     <tr> 
      <td rowspan="4">444</td> 
      <td>555</td> 
     </tr> 
     <tr> 
      <td>666</td> 
     </tr> 
     <tr> 
      <td>777</td> 
     </tr> 
     <tr> 
      <td>888</td> 
     </tr> 
     <tr> 
      <td rowspan="4">999</td> 
      <td>101010</td> 
     </tr> 
     <tr> 
      <td>111111</td> 
     </tr> 
     <tr> 
      <td>121212</td> 
     </tr> 
     <tr> 
      <td>131313</td> 
     </tr> 
     <tr> 
      <td rowspan="5">141414</td> 
      <td>151515</td> 
     </tr> 
     <tr> 
      <td>161616</td> 
     </tr> 
     <tr> 
      <td>171717</td> 
     </tr> 
     <tr> 
      <td>181818</td> 
     </tr> 
     <tr> 
      <td>191919</td> 
     </tr> 
     <tr> 
      <td rowspan="4">202020</td> 
      <td>212121</td> 
     </tr> 
     <tr> 
      <td>222222</td> 
     </tr> 
     <tr> 
      <td>232323</td> 
     </tr> 
     <tr> 
      <td>242424</td> 
     </tr> 
    </tbody> 
</table> 

預期的輸出應該是這樣的,

<table> 
    <tbody> 
     <tr> 
      <td rowspan="2" color="shaded">111</td> 
      <td color="shaded">222</td> 
     </tr> 
     <tr> 
      <td color="shaded">333</td> 
     </tr> 
     <tr> 
      <td rowspan="4">444</td> 
      <td>555</td> 
     </tr> 
     <tr> 
      <td>666</td> 
     </tr> 
     <tr> 
      <td>777</td> 
     </tr> 
     <tr> 
      <td>888</td> 
     </tr> 
     <tr> 
      <td rowspan="4" color="shaded">999</td> 
      <td color="shaded">101010</td> 
     </tr> 
     <tr> 
      <td color="shaded">111111</td> 
     </tr> 
     <tr> 
      <td color="shaded">121212</td> 
     </tr> 
     <tr> 
      <td color="shaded">131313</td> 
     </tr> 
     <tr> 
      <td rowspan="5">141414</td> 
      <td>151515</td> 
     </tr> 
     <tr> 
      <td>161616</td> 
     </tr> 
     <tr> 
      <td>171717</td> 
     </tr> 
     <tr> 
      <td>181818</td> 
     </tr> 
     <tr> 
      <td>191919</td> 
     </tr> 
     <tr> 
      <td rowspan="4" color="shaded">202020</td> 
      <td color="shaded">212121</td> 
     </tr> 
     <tr> 
      <td color="shaded">222222</td> 
     </tr> 
     <tr> 
      <td color="shaded">232323</td> 
     </tr> 
     <tr> 
      <td color="shaded">242424</td> 
     </tr> 
    </tbody> 
</table> 

這是怎樣的表HTML視圖,前後改造中後,

before

after

我已經花了一個星期的時間爲XSLT找到一個解決方案,但仍然無法找到解決方法。任何人都可以建議我這樣做的方法。

+1

和你有什麼到目前爲止已經試過? – Rupesh

回答

1

嘗試第一分組行:

<xsl:variable name="grouped-rows" as="element(rowgroup)*"> 
    <xsl:for-each-group select="td" group-starting-with="td[@rowspan]"> 
    <rowgroup><xsl:copy-of select="current-group()"/></rowgroup> 
    </ 
</ 
然後迭代

在組:

<xsl:for-each select="$grouped-rows"> 
    <xsl:variable name="style" select="if (position() mod 2 = 0) then 'pink' else 'blue'"/> 
    <xsl:for-each select="child::td"> 
    <td class="{$style}"> 
     <xsl:copy-of select="@*, node()"/> 
    </ 
    </ 
</