2017-09-25 4 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> 

になりますこれは、trasformationの前と後に、

beforeどのようにテーブルのHTMLビューであります

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()"/> 
    </ 
    </ 
</ 
関連する問題