Re: [xsl] Incorrect colname attribute value in case of rowspan attribute presence in html while HTML to CALS Table Transformation

Subject: Re: [xsl] Incorrect colname attribute value in case of rowspan attribute presence in html while HTML to CALS Table Transformation
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Mon, 30 Apr 2012 10:48:20 +0100
This is essentially a commercial problem, so you may get some free
help on here, but you might have to go back to your employer.




On 30 April 2012 10:41, Praveen Chauhan <Praveen.Chauhan@xxxxxxxxxxxxxx>
wrote:
> Hi Joga Ji,
>
> Below link may be useful:
>
> http://stackoverflow.com/questions/4626873/html-to-cals-tables
>
>
>
>
> Thanks
> Praveen Chauhan
>
> -----Original Message-----
> From: Joga Singh Rawat [mailto:jrawat@xxxxxxxxxxxxxx]
> Sent: Monday, April 30, 2012 11:01 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Incorrect colname attribute value in case of rowspan
attribute presence in html while HTML to CALS Table Transformation
>
> Hi  Michael,
> Solution provided by you is good but my question is totally different from
> this.
>
> Thanks
> ...JSR
>
>
> -----Original Message-----
> From: Joga Singh Rawat [mailto:jrawat@xxxxxxxxxxxxxx]
> Sent: Sunday, April 29, 2012 10:59 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Incorrect colname attribute value in case of rowspan
> attribute presence in html while HTML to CALS Table Transformation
>
> HI Everybody,
> I am converting plain html table to cals table. I have calculated 'colspan'
> into 'spanname' correctly but I don't have any clue to transform 'rowspan'.
>
> Please let me know any clue. Below is INPUT, XSLT, OUTPUT and Required
> output
>
>
> Input:
> <div class="divTable">
> <table class="numtable" id="table2">
>   <tbody>
>    <tr>
>     <td class="tch rowspan="2">col1</td>
>     <td class="tch" colspan="3">col2-4</td>
>    </tr>
>    <tr>
>     <td class="tch">col2</td>
>     <td class="tch">col3</td>
>     <td class="tch">col4</td>
>    </tr>
>    <tr>
>     <td class="tch">col1</td>
>     <td class="tch">col2</td>
>     <td class="tch">col3</td>
>     <td class="tch">col4</td>
>    </tr>
>    <tr>
>     <td class="tch">col1</td>
>     <td class="tch" rowspan="3">col2</td>
>     <td class="tch" colspan="2">col3-4</td>
>    </tr>
>    <tr>
>     <td class="tch">col1</td>
>     <td class="tch">col3</td>
>     <td class="tch">col4</td>
>    </tr>
>    <tr>
>     <td class="tch">col1</td>
>     <td class="tch">col3</td>
>     <td class="tch">col4</td>
>     </tr>
>    </tbody>
>   </table>
> </div>
>
>
> XSLT
> <xsl:template match="td">
>  <entry>
>  <xsl:call-template name="colname-spanname"/>
>  <xsl:apply-templates/>
>  </entry>
> </xsl:template>
>
> <xsl:template name="colname-spanname">
>  <xsl:if test="not(@colspan)">
>   <xsl:attribute name="colname">
>    <xsl:text>col</xsl:text>
>    <xsl:if test="not(preceding-sibling::td[@colspan])">
>     <xsl:value-of select="count(preceding-sibling::td)+1"/>
>    </xsl:if>
>    <xsl:if test="preceding-sibling::td[@colspan]">
>     <xsl:variable name="colspan_values"
> select="sum(preceding-sibling::td[@colspan]/@colspan)"/>
>     <xsl:variable name="td_number" select="count(preceding-sibling::td)"/>
>     <xsl:variable name="colspan_td_number"
> select="count(preceding-sibling::td[@colspan])"/>
>     <xsl:value-of select="($td_number+$colspan_values+1) -
> $colspan_td_number"/>
>    </xsl:if>
>   </xsl:attribute>
>  </xsl:if>
>  <xsl:if test="@colspan">
>   <xsl:attribute name="spanname">
>    <xsl:if test="not(preceding-sibling::td[@colspan])">
>     <xsl:value-of select="count(preceding-sibling::td)+1"/>
>     <xsl:text>to</xsl:text>
>     <xsl:variable name="td_number" select="count(preceding-sibling::td)"/>
>     <xsl:variable name="colspan" select="@colspan"/>
>     <xsl:value-of select="count(preceding-sibling::td)+@colspan"/>
>    </xsl:if>
>    <xsl:if test="preceding-sibling::td[@colspan]">
>     <xsl:variable name="colspan_values"
> select="sum(preceding-sibling::td[@colspan]/@colspan)"/>
>     <xsl:variable name="td_number" select="count(preceding-sibling::td)"/>
>     <xsl:variable name="colspan_number"
> select="count(preceding-sibling::td[@colspan])"/>
>     <xsl:variable name="starting_value">
>      <xsl:value-of select="($td_number+$colspan_values+1) -
> $colspan_number"/>
>     </xsl:variable>
>     <xsl:value-of select="$starting_value"/>
>     <xsl:text>to</xsl:text>
>     <xsl:value-of select="($starting_value+@colspan) - 1"/>
>    </xsl:if>
>   </xsl:attribute>
>   <xsl:attribute name="namest">
>    <xsl:text>col</xsl:text>
>    <xsl:if test="not(preceding-sibling::td[@colspan])">
>     <xsl:value-of select="count(preceding-sibling::td)+1"/>
>    </xsl:if>
>    <xsl:if test="preceding-sibling::td[@colspan]">
>     <xsl:value-of
>
select="count(preceding-sibling::td[not(@colspan)])+sum(preceding-sibling::t
> d[@colspan]/@colspan)+1"/>
>    </xsl:if>
>   </xsl:attribute>
>   <xsl:attribute name="nameend">
>    <xsl:text>col</xsl:text>
>    <xsl:if test="not(preceding-sibling::td[@colspan])">
>     <xsl:value-of select="count(preceding-sibling::td)+@colspan"/>
>    </xsl:if>
>    <xsl:if test="preceding-sibling::td[@colspan]">
>     <xsl:value-of
>
select="count(preceding-sibling::td[not(@colspan)])+sum(preceding-sibling::t
> d[@colspan]/@colspan)+@colspan"/>
>    </xsl:if>
>   </xsl:attribute>
>  </xsl:if>
>  </xsl:template>
>
> <xsl:template name="max_column">
>  <xsl:if test="not(descendant::td[@colspan][not(@class='Table_Caption' or
> @class='Table_caption')][not(@class='Table_Subtitle' or
> @class='Table_subtitle')])">
>   <xsl:value-of select="for $x in descendant::tbody return (max((for $y in
> descendant::tr[not(child::td[@class='Table_Caption' or
> @class='Table_caption'])][not(child::td[@class='Table_Subtitle' or
> @class='Table_subtitle'])] return count($y/td))))"/>
>  </xsl:if>
>  <xsl:if test="descendant::td[@colspan][not(@class='Table_Caption' or
> @class='Table_caption')][not(@class='Table_Subtitle' or
> @class='Table_subtitle')]">
>   <xsl:variable name="tr_without_colspan" as="xsd:integer?">
>    <xsl:value-of select="for $x in descendant::tbody return if
> (descendant::tr[not(child::td[@colspan])]) then (max((for $y in
>
descendant::tr[not(child::td[@colspan])][not(child::td[@class='Table_Caption
> ' or @class='Table_caption'])][not(child::td[@class='Table_Subtitle' or
> @class='Table_subtitle'])] return count($y/td)))) else 0"/>
>   </xsl:variable>
>   <xsl:variable name="tr_with_colspan" as="xsd:integer?">
>    <xsl:value-of select="for $x in descendant::tbody return (max((for $y in
> descendant::tr[child::td[@colspan]][not(child::td[@class='Table_Caption' or
> @class='Table_caption'])][not(child::td[@class='Table_Subtitle' or
> @class='Table_subtitle'])] return number(count($y/td[not(@colspan)]) +
> sum($y/td/@colspan)))))"/>
>   </xsl:variable>
>   <xsl:value-of select="max(($tr_with_colspan,$tr_without_colspan))"/>
>  </xsl:if>
>  </xsl:template>
>
> Output:
> <table id="FileName_table2">
>   <tgroup cols="4">
>    <thead>
>     <row>
>      <entry colname="col1" morerows="1">col1</entry>
>      <entry spanname="2to4" namest="col2" nameend="col4">col2-4</entry>
>     </row>
>     <row>
>      <entry colname="col1">col2</entry>
>      <entry colname="col2">col3</entry>
>      <entry colname="col3">col4</entry>
>     </row>
>     <row>
>      <entry colname="col1">col1</entry>
>      <entry colname="col2">col2</entry>
>      <entry colname="col3">col3</entry>
>      <entry colname="col4">col4</entry>
>     </row>
>     <row>
>      <entry colname="col1">col1</entry>
>      <entry colname="col2" morerows="2">col2</entry>
>      <entry spanname="3to4" namest="col3" nameend="col4">col3-4</entry>
>     </row>
>     <row>
>      <entry colname="col1">col1</entry>
>      <entry colname="col2">col3</entry>
>      <entry colname="col3">col4</entry>
>     </row>
>     <row>
>      <entry colname="col1">col1</entry>
>      <entry colname="col2">col3</entry>
>      <entry colname="col3">col4</entry>
>     </row>
>    </thead>
>   </tgroup>
> </table>
>
> Required Output:
> <table id="FileName_table2">
>  <tgroup cols="4">
>   <thead>
>    <row>
>     <entry colname="col1" morerows="1">col1</entry>
>     <entry spanname="2to4" namest="col2" nameend="col4">col2-4</entry>
>    </row>
>    <row>
>     <entry colname="col2">col2</entry>
>     <entry colname="col4">col3</entry>
>     <entry colname="col4">col4</entry>
>    </row>
>    <row>
>     <entry colname="col1">col1</entry>
>     <entry colname="col2">col2</entry>
>     <entry colname="col3">col3</entry>
>     <entry colname="col4">col4</entry>
>    </row>
>    <row>
>     <entry colname="col1">col1</entry>
>     <entry colname="col2" morerows="2">col2</entry>
>     <entry spanname="3to4" namest="col3" nameend="col4">col3-4</entry>
>    </row>
>    <row>
>     <entry colname="col1">col1</entry>
>     <entry colname="col3">col3</entry>
>     <entry colname="col4">col4</entry>
>    </row>
>    <row>
>     <entry colname="col1">col1</entry>
>     <entry colname="col3">col3</entry>
>     <entry colname="col4">col4</entry>
>    </row>
>   </thead>
>  </tgroup>
> </table>
>
> Thanks
> ...JSR
>



--
Andrew Welch
http://andrewjwelch.com

Current Thread