Xslt 将具有colspan的表转换为DataTables

Xslt 将具有colspan的表转换为DataTables,xslt,dita,Xslt,Dita,我的最终目标是将带有colspan的HTML表转换为带有XSLT样式表的Dita docbook格式表 对于那些不熟悉DITA表的人,它使用namest和nameend属性来实现colspannamest和nameend分别是起始列和结束列的名称。列名由colspecs元素指定 <colspec colname="c1" colnum="1"> 然后我使用以下命令生成colspec元素的$colNum,其中colname和column从1增加到$colNum <xsl:f

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

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

 <colspec colname="c1" colnum="1"> 
然后我使用以下命令生成colspec元素的
$colNum
,其中
colname
column
从1增加到
$colNum

<xsl:for-each select="1 to $colNum">
    <colspec colname="{concat('c', .)}" column="{.}" />
</xsl:for-each>
对于第三行,第二个td,它实际上是第四列!我的xslt无法通过研究那一行来判断。我在sudo代码中得到了这一点

position() of current td + sum(preceding-sibling[colspan])
在这种情况下,这应该给我3,但我不知道如何解释实际上将td 1列向后推的行跨度

让我知道是否有更好的替代方法来做这件事


我知道这是一个复杂的问题。感谢您的任何帮助!万分感谢

也许尝试整数而不是数字?谢谢你,mkaatman!真管用!我也曾想过使用xs:integer,但我将它们放在带有as属性的xsl:variable中。这让我的xml过程非常不愉快。现在
xs:integer($colNum)
<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>
position() of current td + sum(preceding-sibling[colspan])