Как включить разделы HTML в шаблон XSL? - PullRequest
1 голос
/ 05 января 2012

У меня есть шаблон XSL, представляющий собой небольшой раздел электронного письма в формате HTML. Раздел XSL изменяется в зависимости от данных, а окружающий HTML - нет. Я хотел бы включить этот HTML-код в шаблон XSL. Я попробовал следующий подход, но получил исключение, потому что теги в EmailHeader.html не закрыты. Я пытался использовать теги CDATA, но безуспешно.

Мое исключение: произошел неожиданный конец файла. Следующие элементы не закрыты: td, tr, таблица, td, tr, таблица, тело, html.

Как включить разделы html в шаблон XSL?

(примеры кода были упрощены)

Мой 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 Ответ

4 голосов
/ 06 января 2012

Что вы можете сделать, это создать свой полный шаблон электронной почты в отдельном файле, а затем передать ему в качестве параметра тело электронного письма.Например, сохраните следующий 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 для импорта этого файла, а затем вызовите именованный Email шаблон с 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>
...