BR未在XSLT中转换为换行符

时间:2017-07-12 12:45:33

标签: xml xslt html-email

我正在使用XSLT生成电子邮件正文,如下所示:

<?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" indent="yes"/>   
    <xsl:param name="Test"/>     
    <xsl:template match="/">
        <html>
            <body>
                <br/>Test: <xsl:value-of select="$Test"/>
            </body>
        </html>
    </xsl:template> 
    </xsl:stylesheet>

Test参数的值为"sample <br> sample" 但在电子邮件正文中,我正在获取<br>标签。 它没有转换为换行符。 但是,如果我将它直接放在XSLT模板中,那么它正在工作。 只有当br标签在参数值中时,它才会起作用。 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

要有机会创建多个文本节点,您需要使用loading而不是<xsl:copy-of select="$Test"/>。但是,在这种情况下,您需要确保将结果树片段或节点作为参数值传递,而不是字符串。如果你传递一个字符串,你所能做的就是使用value-of并希望你的处理器和设置支持它。

带有字符串参数的示例为

<xsl:value-of select="$Test" disable-output-escaping="yes"/>

如果支持则输出例如

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">   
    <xsl:param name="Test"><![CDATA[sample <br> sample]]></xsl:param>     
    <xsl:template match="/">
        <html>
            <body>
                <br/>Test: <xsl:value-of select="$Test" disable-output-escaping="yes"/>
            </body>
        </html>
    </xsl:template> 
</xsl:stylesheet>

另一方面,使用片段作为参数值和<html> <body><br>Test: sample <br> sample </body> </html> ,如

copy-of

您将获得与任何处理器相同的输出。唯一的挑战可能是将片段作为参数值传递,特别是从命令行运行时。