我想在“tr”元素中使用“td”元素的计数为元素添加属性valve。
我的输入xml:
<table>
<tbody>
<tr>
<td>
<p>Type</p>
</td>
<td>
<p>Risk</p>
</td>
</tr>
<tr>
<td>
<p>Fundic</p>
</td>
<td>
<p>Low</p>
</td>
</tr>
</tbody>
</table>
XSL我用作:
<xsl:template match="table">
<table>
<xsl:if test="@title">
<title><xsl:value-of select="@title"/></title>
</xsl:if>
<tgroup>
<xsl:apply-templates/>
</tgroup>
</table>
</xsl:template>
<xsl:template match="tbody">
<tbody>
<xsl:apply-templates/>
</tbody>
</xsl:template>
<xsl:template match="th | tr">
<row>
<xsl:apply-templates/>
</row>
</xsl:template>
<xsl:template match="td">
<entry>
<xsl:if test="@align">
<xsl:attribute name="align"><xsl:value-of select="@align"/></xsl:attribute>
</xsl:if>
<xsl:if test="@valign">
<xsl:attribute name="valign"><xsl:value-of select="@valign"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</entry>
</xsl:template>
输出我得到:
<table>
<tgroup>
<tbody>
<row>
<entry>
<p>Type</p>
</entry>
<entry>
<p>Risk</p>
</entry>
</row>
<row>
<entry>
<p>Fundic</p>
</entry>
<entry>
<p>Low</p>
</entry>
</row>
</tbody>
</tgroup>
</table>
预期输出如下:
<table>
<tgroup cols="2">
<tbody>
<row>
<entry>
<p>Type</p>
</entry>
<entry>
<p>Risk</p>
</entry>
</row>
<row>
<entry>
<p>Fundic</p>
</entry>
<entry>
<p>Low</p>
</entry>
</row>
</tbody>
</tgroup>
</table>
我需要使用“tr”中的“td”计数来获取cols值。如果单个“td”表示cols =“1”并且它取决于在“tr”内使用多个“td”的计数
请建议我为此编码。提前致谢
答案 0 :(得分:1)
使用此
<xsl:template match="table">
<table>
<xsl:if test="@title">
<title><xsl:value-of select="@title"/></title>
</xsl:if>
<tgroup>
<xsl:attribute name="cols">
<xsl:value-of select="count(descendant::tr[1]/td) + sum(descendant::tr[1]/td/@colspan)"/>
</xsl:attribute>
<xsl:apply-templates/>
</tgroup>
</table>
</xsl:template>
<xsl:template match="tbody">
<tbody>
<xsl:apply-templates/>
</tbody>
</xsl:template>
<xsl:template match="th | tr">
<row>
<xsl:apply-templates/>
</row>
</xsl:template>
<xsl:template match="td">
<entry>
<xsl:if test="@align">
<xsl:attribute name="align"><xsl:value-of select="@align"/></xsl:attribute>
</xsl:if>
<xsl:if test="@valign">
<xsl:attribute name="valign"><xsl:value-of select="@valign"/></xsl:attribute>
</xsl:if>
<p><xsl:apply-templates/></p>
</entry>
</xsl:template>