You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSLT提取HTML高度属性并实现通用模板改造

通用化XSLT行模板解决方案

没问题,这就帮你把模板改得通用起来,用变量替代固定的高度值117,让它能处理所有Row_XXX格式的table~

核心思路

  1. 从table的class属性中自动提取高度数值(比如从Row_117里拿到117)
  2. 把所有硬编码的117替换为动态变量
  3. 让模板匹配所有以Row_开头的table,不用再为每个高度写单独模板

修改后的完整代码

<!-- 通用化行模板,适配任意Row_XXX格式的class -->
<xsl:template name="Row_Template" match="xhtml:table[starts-with(@class, 'Row_')]">
  <!-- 从class属性提取高度数值:Row_XXX → XXX -->
  <xsl:variable name="rowHeight" select="substring(@class, 5)"/>
  
  <table width="600" height="{$rowHeight}" border="0" cellpadding="0" cellspacing="0" align="center" class="deviceWidth">
    <tr>
      <td>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[ <!--[if gte mso 9]>
          <table width="600" height="]]>
        </xsl:text>
        <!-- 把高度变量插入MSO条件注释 -->
        <xsl:value-of select="$rowHeight"/>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[" align="center">
            <tr>
              <td width="300">
            <![endif]--> ]]>
        </xsl:text>
        <xsl:apply-templates select="./*"/>
      </td>
    </tr>
  </table>
</xsl:template>

关键细节说明

  • 匹配规则优化:用starts-with(@class, 'Row_')替代固定的Row_117,这样所有Row_100、Row_150这类table都会被这个模板处理
  • 动态高度提取:substring(@class, 5)从Row_XXX里截取高度值("Row_"是4个字符,从第5位开始就是数字部分)
  • MSO注释处理:因为CDATA块里不能直接用变量,所以把注释拆成三段:先输出CDATA前缀,再插入变量值,最后输出CDATA后缀,确保Outlook的条件注释能正确拿到高度值

可选:手动传参调用模板

如果需要手动调用模板而不是靠自动匹配,可以给模板加参数,这样更灵活:

<xsl:template name="Row_Template">
  <!-- 定义必填的高度参数 -->
  <xsl:param name="rowHeight" required="yes"/>
  
  <table width="600" height="{$rowHeight}" border="0" cellpadding="0" cellspacing="0" align="center" class="deviceWidth">
    <tr>
      <td>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[ <!--[if gte mso 9]>
          <table width="600" height="]]>
        </xsl:text>
        <xsl:value-of select="$rowHeight"/>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[" align="center">
            <tr>
              <td width="300">
            <![endif]--> ]]>
        </xsl:text>
        <xsl:apply-templates select="./*"/>
      </td>
    </tr>
  </table>
</xsl:template>

<!-- 调用示例 -->
<xsl:call-template name="Row_Template">
  <xsl:with-param name="rowHeight" select="117"/>
</xsl:call-template>

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:28:19