2017-09-25 1 views
0

XSLT를 사용하여 html 테이블을 다른 html 테이블로 변환해야합니다. 제 목표는 표 셀 색상을 얼룩말 스타일로 수정하는 것입니다. 문자 그대로 지브라 스타일은 테이블 행의 색상을 차례대로 변경하는 것을 의미합니다.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 후의 테이블 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()"/> 
    </ 
    </ 
</