我需要使用XSLT将html表转换为另一个html表。我的目标是将表格单元格颜色修改为Zebra样式。字面上斑马风格意味着一个接一个地改变表格行的颜色。
对于简单表(有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视图在转换之前和之后的方式,
我花了几周的时间从XSLT找到解决方案,但仍无法找到解决方法。任何人都可以建议我这样做的方法。
答案 0 :(得分: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()"/>
</
</
</