6

私は XSLT (v1.0) の初心者で、XSLT を使用して複雑な XHTML テーブルを LaTeX に変換できません。

複雑なテーブルとは、列の数が異なる行を持つテーブルです。つまりtdcolspan.

つまり (xhtml テーブル)

<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>

XSL ファイルで行っていることは次のとおりです。

<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>}&#10;</xsl:text>
        </xsl:if>
    </xsl:for-each>

    <xsl:text>\toprule&#10;</xsl:text>
    <xsl:for-each select="xhtml:tr">
        <xsl:if test="position() != 1">
            <xsl:text>\midrule&#10;</xsl:text>
        </xsl:if>

        <xsl:if test="position() = 2">
            <xsl:text>\midrule&#10;</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>&amp;</xsl:text>
            </xsl:if>
        </xsl:for-each>

        <xsl:text> \\&#10;</xsl:text>
    </xsl:for-each>

    <xsl:text>\bottomrule&#10;</xsl:text>

    <xsl:text>\end{tabular}&#10;</xsl:text>
    <xsl:text>\end{center}&#10;</xsl:text>
</xsl:template>

しかし、ご覧のとおり、このコードは colspan 属性を使用しない単純なテーブルに対してのみ機能します。コードは最初の をループし、trそれぞれtdに「c」を書き込みます。したがって、上記の場合、1 列のテーブルのみが作成されます。

私がしたいのは、 の数とtd、存在する場合は colspans の数を数えて、3 列の正しいテーブルを作成することです。

誰もこれを行う方法を知っていますか? 前もって感謝します。

4

1 に答える 1