将带有colspan的表转换为DataTables

时间:2013-06-17 17:21:47

标签: xslt dita

我的最终目标是使用XSLT样式表将带有colspan的HTML表格转换为Dita docbook格式table

对于那些不熟悉DITA表的人,它使用namestnameend属性来实现colspan; namestnameend分别是开始和结束列的名称。列名由colspecs元素指定。

 <colspec colname="c1" colnum="1"> 

我遇到以下困难:

1)我想自动生成这些colspec元素。

因为我处理了很多表,所以我没有固定数量的列。我正在使用如下的XSLT函数进行计数:

<xsl:variable name="colNum" select="count(tbody/tr[td][1]/td[not(@*)]) + sum(tbody/tr[td][1]/td/@colspan)" />

然后我使用以下内容生成$colNum colspec元素,colnamecolumn从1增加到$colNum

<xsl:for-each select="1 to $colNum">
    <colspec colname="{concat('c', .)}" column="{.}" />
</xsl:for-each>

当我运行此样式表时,我收到错误抱怨$colNum不是整数。我尝试将带有多个xslt函数的$colNum转换为整数,例如:ceiling(number($colNum)),但xml进程坚持$colNum是双倍的!

2)找到colspan的起始列的正确位置。

以此表为例:

<table>
   <tbody>
      <tr>
         <th colspan="3">
            <p>Name</p>
         </th>
         <th>
            <p>Description</p>
         </th>
      </tr>
      <tr>
         <td rowspan="6"/>
         <td colspan="2">country-name</td>
         <td>Country</td>
      </tr>
      <tr>
         <td colspan="2">extended-address</td>
         <td colspan="1"><p>Extra field for address information. </p></td>
      </tr>
    </tbody>
</table>

对于第3行,第2行,它实际上是第4列!我的xslt将无法通过研究那一行来判断。我在sudo代码中得到了这个

position() of current td + sum(preceding-sibling[colspan])

在这种情况下,这应该给我3,但我不知道如何解释实际上推回td 1列的rowspan。

让我知道是否有更好的选择来做到这一点!

我知道这是一个复杂的问题。任何帮助表示赞赏!提前感谢一百万!

0 个答案:

没有答案