需要使用表中的“td”元素来修复cols编号

时间:2017-02-27 07:25:13

标签: xml xslt xslt-2.0

我想在“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”的计数

请建议我为此编码。提前致谢

1 个答案:

答案 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>