2012-01-05 109 views
1

我有一個XSL模板,它是HTML電子郵件的一小部分。 XSL部分根據數據更改,但周圍的HTML不會。我想將這個HTML包含在XSL模板中。我嘗試了以下方法,但因爲EmailHeader.html中的標記沒有關閉而發生異常。我嘗試使用CDATA標籤,但沒有成功。如何在XSL模板中包含HTML部分?

我的異常:發生意外的文件結束。以下元素不會關閉: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> 
+0

爲什麼你不能在文檔中直接插入這些html元素? – 2012-01-05 15:07:06

+0

我可以,但我想讓它們分開,以便如果/當它們發生更改時,我不必編輯每個XSL文件(可能有數百個)。頁眉和頁腳保持電子郵件的外觀/結構,而XSL只是填充它的動態文本。合理? – ExceptionEx 2012-01-05 15:19:25

+0

如何扭轉它?換句話說,將頁眉/頁腳放在一個XSL文件中,然後導入內容。這應該保持一切正常... – deanoj 2012-01-05 15:24:58

回答

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

2年過去了,但對我的項目來說這真是太好了 – 2015-04-25 09:06:23

相關問題