【问题标题】:How can I include HTML sections in XSL template?如何在 XSL 模板中包含 HTML 部分?
【发布时间】:2012-01-05 15:00:26
【问题描述】:

我有一个 XSL 模板,它是 HTML 电子邮件的一小部分。 XSL 部分会根据数据发生变化,但周围的 HTML 不会。我想在 XSL 模板中包含这个 HTML。我尝试了以下方法,但由于 EmailHeader.html 中的标签未关闭而出现异常。我尝试使用 CDATA 标签,但没有成功。

我的异常:文件意外结束。以下元素未关闭:td、tr、table、td、tr、table、body、html。

如何在 XSL 模板中包含 html 部分?

(代码示例已简化)

我的 XSL 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" />

     <xsl:template match="/Email">    

     <xsl:copy-of select="document('EmailHeader.html')"></xsl:copy-of>

    <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td style="width:25px">&#160;</td>
        <td style="width:550px; text-align:left; font-family:Arial; font-size:10pt; color:#444444">
          <br /><br />
          To <xsl:value-of select="FirstName"/>&#160;<xsl:value-of select="LastName"/>:
          <br /><br />
          Welcome, and thank you for enrolling...
         </td>
        <td style="width:25px">&#160;</td>
      </tr>
    </table>

    <xsl:copy-of select="document('EmailFooter.html')"></xsl:copy-of>

   </xsl:template>

</xsl:transform>

EmailHeader.html:

<html xmlns="http://www.w3.org/1999/xhtml" style="background-color:#96A084">
<head>
    <title></title>
</head>
<body style="background-color:#96A084; margin:0px; padding:0px">
<table border="0" cellpadding="0" cellspacing="0" width="630px" style="background-color:#96A084">
  <tr>
    <td>

EmailFooter.html:

    <td style="width:15px">&#160;</td>
  </tr>
</table>
</body>
</html>

【问题讨论】:

  • 为什么不能直接在文档中插入这些 html 元素?
  • 我可以,但我想将它们分开,这样如果/当它们发生变化时,我就不必编辑我拥有的每个 XSL 文件(可能是数百个)。页眉和页脚维护电子邮件的外观/结构,而 XSL 只是填充它的动态文本。有意义吗?
  • 倒过来怎么样?换句话说,将页眉/页脚放在一个 XSL 文件中,然后导入内容。这应该保持一切正常......
  • 我正在尝试。当前出现错误第 96 行位置 36 上的“img”开始标记与简单代码段上“a”的结束标记不匹配
  • 另外,如果我反转它并使用包含指向动态 XSL 的链接的页眉/页脚调用 XSL,则不会填充包含的 XSL 字段。换句话说,XML 字段的映射似乎没有到达 节点包含的文件。有什么想法吗?

标签: html xslt cdata


【解决方案1】:

您可以做的是在一个单独的文件中创建完整的电子邮件模板,然后将电子邮件的正文作为参数传递给它。例如,将以下 XSLT 保存在名为 EmailTemplate.xslt

的文件中
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="html"/>

   <xsl:template name="Email">
      <xsl:param name="body"/>
      <html xmlns="http://www.w3.org/1999/xhtml" style="background-color:#96A084">
         <head>
            <title/>
         </head>
         <body style="background-color:#96A084; margin:0px; padding:0px">
            <table border="0" cellpadding="0" cellspacing="0" width="630px" style="background-color:#96A084">
               <tr>
                  <td>
                     <xsl:copy-of select="$body"/>
                  </td>
                  <td style="width:15px"> </td>
               </tr>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:transform>

接下来,修改您的原始 XSLT 以导入此文件,然后使用电子邮件正文的 HTML 作为参数调用命名的 Email 模板

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:include href="EmailTemplate.xslt"/>

   <xsl:output method="html"/>

   <xsl:template match="/Email">
      <xsl:variable name="body">
         <table border="0" cellpadding="0" cellspacing="0">
            <tr>
               <td style="width:25px"> </td>
               <td style="width:550px; text-align:left; font-family:Arial; font-size:10pt; color:#444444">
                  <br/>
                  <br/> To 
                  <xsl:value-of select="FirstName"/> 
                  <xsl:value-of select="LastName"/>: 
                  <br/>
                  <br/>Welcome, and thank you for enrolling... 
               </td>
               <td style="width:25px"> </td>
            </tr>
         </table>
      </xsl:variable>
      <xsl:call-template name="Email">
         <xsl:with-param name="body" select="$body"/>
      </xsl:call-template>
   </xsl:template>

</xsl:transform>

因此,当您将此 XSLT 应用于以下 XML 时

<Email>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Email>

应该输出以下内容

<html style="background-color:#96A084" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body style="background-color:#96A084; margin:0px; padding:0px">
<table border="0" cellpadding="0" cellspacing="0" width="630px" style="background-color:#96A084">
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" xmlns=""><tr><td style="width:25px"> </td><td style="width:550px; text-align:left; font-family:Arial; font-size:10pt; color:#444444"><br><br> To 
                  John 
                  Smith: 
                  <br><br>Welcome, and thank you for enrolling... 
               </td><td style="width:25px"> </td></tr></table>
</td>
<td style="width:15px"> </td>
</tr>
</table>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 2017-10-26
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2014-02-04
    • 2015-02-07
    相关资源
    最近更新 更多