lnamest和nameend更改为colspan

问题描述

我想将namest和nameend属性值更改为colspan属性

XML输入:

<row>
    <entry nameend="col2" namest="col1">Claims</entry>
</row>

我拥有的XSL:

<xsl:template match="row">
    <tr>
      <xsl:apply-templates/>
    </tr>
  </xsl:template>
  
  <xsl:template match="entry">
    <td>
      <xsl:apply-templates/>
    </td>
  </xsl:template>

预期输出为:

 <tr>
    <td colspan="2">Claims</td>
</tr>

如果namest="1"nameend="3",则colspan的值为3。它必须依赖于namest和nameend值。它必须根据名称名称来计算数字。

解决方法

很难给出一个基于单个示例的算法,而没有给出任何规则。以下应该适用于您在上面的输入:

<xsl:template match="entry">
    <xsl:variable name="start" select="substring-after(@namest,'col')" />
    <xsl:variable name="end" select="substring-after(@nameend,'col')" />
    <td colspan="{$end - $start + 1}">
        <xsl:apply-templates/>
    </td>
</xsl:template>

这是假设您正在使用XSLT 1.0。如果您使用的是XSLT 2.0处理器,并且样式表被标记为version="2.0",则需要执行以下操作:

<xsl:template match="entry">
    <xsl:variable name="start" select="number(substring-after(@namest,'col'))" />
    <xsl:variable name="end" select="number(substring-after(@nameend,'col'))" />
    <td colspan="{$end - $start + 1}">
        <xsl:apply-templates/>
    </td>
</xsl:template>