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

时间:2012-01-05 15:00:27

标签: html xslt cdata

我有一个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>

1 个答案:

答案 0 :(得分:4)

您可以做的是在单独的文件中创建完整的电子邮件模板,然后将电子邮件正文作为参数传递给它。例如,将以下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作为参数调用指定的电子邮件模板

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