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(_at_)aptaracorp(_dot_)com]
Sent: Sunday, April 29, 2012 10:59 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--