您可以定义一个变量来获取
td
考虑到科尔斯潘,就像这样
<xsl:variable name="colpos"
select="sum(preceding-sibling::td/@colspan) + count(preceding-sibling::td[not(@colspan)]) + 1" />
或者在使用XSLT 2.0时,可以这样编写表达式。。。
<xsl:variable name="colpos"
select="sum(for $td in preceding-sibling::td return (if ($td/@colspan) then $td/@colspan else 1)) + 1" />
或者这个。。。
<xsl:variable name="colpos"
select="sum(preceding-sibling::td/(if (@colspan) then number(@colspan) else 1)) + 1" />
因此,将存在的colspan相加,并计算没有的colspan(实际上colspan为1)。
然后你需要得到col组中col的数量来进行汇总,就像这样
<xsl:variable name="colspan"
select="if (@colspan) then number(@colspan) else 1" />
然后得到
td
你能做到的
<xsl:value-of
select="concat('width:',
sum(ancestor::table/colgroup/col[position() ge $colpos and position() lt $colpos + $colspan]/number(replace(@width, '%', ''))),
'%;')"/>
试试这个模板
<xsl:template match="td">
<xsl:copy>
<xsl:attribute name="style">
<xsl:if test="@fill">
<xsl:value-of select="concat('background-color: ','#',@fill, ';')"/>
</xsl:if>
<xsl:if test="@align">
<xsl:value-of select="concat('text-align:',@align,';')"/>
</xsl:if>
<xsl:variable name="colpos" select="sum(preceding-sibling::td/@colspan) + count(preceding-sibling::td[not(@colspan)]) + 1" />
<xsl:variable name="colspan" select="if (@colspan) then number(@colspan) else 1" />
<xsl:value-of select="concat('width:', sum(ancestor::table/colgroup/col[position() ge $colpos and position() lt $colpos + $colspan]/number(replace(@width, '%', ''))), '%;')"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>