Subject: RE: [xsl] Re: HTML table colspec and spanspec problem From: "Robby Pelssers" <robby.pelssers@xxxxxxxxx> Date: Fri, 22 Jan 2010 09:47:45 +0100 |
I took a look at the input and output you sent... please check yourself but the samples are totally incorrect and there is no way that xslt transforms your input into the currentoutput... Please reply to this thread with correct INDENTED samples after you remove previous content in order to keep the mail small. Robby Pelssers -----Original Message----- From: Siddhi Thakkar [mailto:siddhi.thakkar@xxxxxxxxxxxxxx] Sent: Friday, January 22, 2010 6:40 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Re: HTML table colspec and spanspec problem Hello there, This is practically the first time that I am posting to this list, so aplogies if I have broken any of the rules. I have an HTML table where in I need to create colspec and spanspec, please see if you can help. I have been scratching my head on this for a week now but couldn't even reach close to it. I understand that the code and examples below are too lengthy to go through, but please help. I should be able to go forward even if somebody could provide me with a logical hint. Thanks very much. I could have posted the code I tried but just wanted to avoid making my whole query less lengthy and less complicated. INPUT XML FILE: <table> <tbody> <tr> <td class="tch" align="left">1</td> <td class="tch" colspan="9" align="right">2</td> </tr> <tr> <td class="tch" align="left">4</td> <td class="tch" align="left">5</td> <td class="tch" align="center">6</td> <td class="tch" align="center">7</td> <td class="tch" colspan="5" align="left">8</td> <td class="tch" align="left">9</td> </tr> <tr> <td class="tb" align="left">10</td> <td class="tb" colspan="9" align="right">11</td> </tr> <tr> <td class="tb" align="left">12</td> <td class="tb" align="left">13</td> <td class="tb" colspan="3" align="right">14</td> <td class="tb" align="left">15</td> <td class="tb" colspan="2" align="left">16</td> </tr> </tbody> </table> CURRENT OUTPUT: <table> <tgroup cols="10"> <thead> <row> <entry class="tch" align="left" name="col1">1</entry> <entry class="tch" colspan="9" align="right" name="col2to10">2</entry> </row> <row> <entry class="tch" align="left" name="col1">4</entry> <entry class="tch" align="left" name="col2">5</entry> <entry class="tch" align="center" name="col3">6</entry> <entry class="tch" align="center" name="col4">7</entry> <entry class="tch" colspan="5" align="left" name="col5to9">8</entry> <entry class="tch" align="left" name="col10">9</entry> </row> </thead> <tbody> <row> <entry class="tb" align="left" name="col1">10</entry> <entry class="tb" colspan="9" align="right" name="col2to10">11</entry> </row> <row> <entry class="tb" align="left" name="col1">12</entry> <entry class="tb" align="left" name="col2">13</entry> <entry class="tb" colspan="3" align="right" name="col3to5">14</entry> <entry class="tb" align="left" name="col6">15</entry> <entry class="tb" colspan="2" align="left" name="col7to8">16</entry> </row> </tbody> </tgroup> </table> DESIRED OUTPUT: <table> <tgroup cols="10"> <!--value of name should be same as the row name, value of align should be the string that has occurred maximum times in rows. For instance, in this example there are four "col1" one inside each row, three of which have "left" as the value of align and one has "right", so colspec name="col1" should have align="left" because it has the maximum occurence of the two. If all the occurences would have been equal, we could have picked any. There could be as many values of align as it is allowed to.--> <colspec name="col1" align="left"/> <colspec name="col2" align="left"/> <colspec name="col3" align="center"/> <colspec name="col4" align="center"/> <colspec name="col6" align="left"/> <colspec name="col10" align="left"/> <spanspec name="col2to10" align="right"/> <spanspec name="col3to5" align="right"/> <spanspec name="col5to9" align="left"/> <spanspec name="col7to8" align="left"/> <thead> <row> <entry class="tch" align="left" name="col1">1</entry> <entry class="tch" colspan="9" align="right" name="col2to10">2</entry> </row> <row> <entry class="tch" align="left" name="col1">4</entry> <entry class="tch" align="left" name="col2">5</entry> <entry class="tch" align="center" name="col3">6</entry> <entry class="tch" align="center" name="col4">7</entry> <entry class="tch" colspan="5" align="left" name="col5to9">8</entry> <entry class="tch" align="left" name="col10">9</entry> </row> </thead> <tbody> <row> <entry class="tb" align="right" name="col1">10</entry> <entry class="tb" colspan="9" align="right" name="col2to10">11</entry> </row> <row> <entry class="tb" align="left" name="col1">12</entry> <entry class="tb" align="left" name="col2">13</entry> <entry class="tb" colspan="3" align="right" name="col3to5">14</entry> <entry class="tb" align="left" name="col6">15</entry> <entry class="tb" colspan="2" align="left" name="col7to8">16</entry> </row> </tbody> </tgroup> </table> CURRENT CODE: <xsl:template match="table"> <table> <tgroup> <xsl:apply-templates/> </tgroup> </table> </xsl:template> <xsl:template match="tr"> <xsl:if test="child::td[@class='tch'][not(preceding::tr[1][child::td[@class='tch ']])]"> <thead> <row> <xsl:apply-templates/> </row> <!--code to group all class="tch" appearing together as thead--> </thead> </xsl:if> <xsl:if test="child::td[@class='tbtm'][not(preceding::tr[1][child::td[@class='tb tm']])]"> <tfoot> <row> <xsl:apply-templates/> </row> <!--code to group all class="tbtm" appearing together as tfoot--> </tfoot> </xsl:if> <xsl:if test="child::td[@class='tb'][not(preceding::tr[1][child::td[@class='tb'] ])]"> <tbody> <row> <xsl:apply-templates/> </row> <!--code to group all class="tb" appearing together as tbody--> </tbody> </xsl:if> </xsl:template> <xsl:template match="tbody"> <xsl:apply-templates/> </xsl:template> <xsl:template match="td"> <entry> <xsl:attribute name="class"> <xsl:value-of select="@class"/> </xsl:attribute> <xsl:if test="@colspan"> <xsl:attribute name="colspan"> <xsl:value-of select="@colspan"/> </xsl:attribute> </xsl:if> <!--following is the code to generate value of name attribute, the values of name attribute of colspec and spanspec should be same as the values generated by the code below--> <xsl:attribute name="name"> <xsl:text>col</xsl:text> <xsl:if test="not(@colspan)"> <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:if> <xsl:if test="@colspan"> <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:if> </xsl:attribute> <xsl:apply-templates/> </entry> </xsl:template> <xsl:template match="p"> <p> <xsl:apply-templates/> </p> </xsl:template> Thanks again, Siddhi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: HTML table colspec and sp, Siddhi Thakkar | Thread | Re: [xsl] Re: HTML table colspec an, Siddhi Thakkar |
[xsl] Insert space after the closin, Selvaganesh | Date | [xsl] RE: xsl document function not, Christian C. Schoute |
Month |