I am new to XSLT (v1.0) and I cannot convert complex XHTML tables to LaTeX using XSLT.
What I mean when I say complex tables is tables with rows with different number of columns. In other words, td with colspan .
i.e. (xhtml table)
<table border="1" cellspacing="0" cellpadding="0"> <tr> <td valign="top" width="68" colspan="3"> <p>Values</p> </td> </tr> <tr> <td valign="top" width="68"> <p>95</p> </td> <td valign="top" width="68"> <p>169</p> <p> </p> </td> <td valign="top" width="68"> <p>180</p> <p> </p> </td> </tr> </table>
What am I doing in the XSL file:
<xsl:template match="xhtml:table[@border='1']"> <xsl:text>\begin{center}</xsl:text> <xsl:text>\begin{tabular}{</xsl:text> <xsl:for-each select="xhtml:tr[1]/*"> <xsl:text>c</xsl:text> <xsl:if test="position() = last()"> <xsl:text>} </xsl:text> </xsl:if> </xsl:for-each> <xsl:text>\toprule </xsl:text> <xsl:for-each select="xhtml:tr"> <xsl:if test="position() != 1"> <xsl:text>\midrule </xsl:text> </xsl:if> <xsl:if test="position() = 2"> <xsl:text>\midrule </xsl:text> </xsl:if> <xsl:for-each select="xhtml:td|xhtml:th"> <xsl:if test="name() = 'th'">{\bf </xsl:if> <xsl:apply-templates /> <xsl:if test="name() = 'th'">}</xsl:if> <xsl:if test="position() != last()"> <xsl:text>&</xsl:text> </xsl:if> </xsl:for-each> <xsl:text> \\ </xsl:text> </xsl:for-each> <xsl:text>\bottomrule </xsl:text> <xsl:text>\end{tabular} </xsl:text> <xsl:text>\end{center} </xsl:text> </xsl:template>
But, as you can see, this code just works for simple tables without the colspan attribute. The code moves around the first tr , and for each td it writes "c". Thus, in the above example, only one column table will be created.
What I want to do is count the number of td and the number of colspans, if it exists, create the correct table with three columns.
Does anyone know how to do this? Thanks in advance.
source share