用逗号分隔字符串并在xslt中插入<br/>代替逗号

时间:2017-07-20 13:05:30

标签: xml email xslt

我有一个带有参数字符串Test的xslt模板,其中包含&#39 ;;&#39;在里面。 我想改变那些;并在我将用作电子邮件正文的字符串中插入换行符。 以下是模板:

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

是否可以在XSLT中完成?

2 个答案:

答案 0 :(得分:0)

简短的回答是是的,可以在某个给定的分隔符上拆分字符串,并用其他东西替换该分隔符。

答案越长是的,这是可能的,但最好的方法取决于您可以使用的XSLT版本。

XSLT 1.0 可能需要以下XPath函数的某种组合:

substring-before()
substring-after()

...以及递归(从自身调用相同的模板)以确保替换所选分隔符的所有实例。

XSLT 2.0 以后允许您使用tokenize()函数,可以在没有模板递归的情况下替换分隔符的所有实例。

完整的XSLT代码的结构留给读者练习。

答案 1 :(得分:-1)

我已经制作了一个满足这个要求的模板。

我每次用字符串的子字符串递归调用它; 每次调用它都会在第一个字符串之前打印字符串的一部分;直到最后一个。

你的字符串必须以a结尾;或者它不会被打印。但您可以将其编辑为模板当然是

<xsl:template name="insertLinebreaks">
    <xsl:param name="pText"/>

    <xsl:if test="contains($pText, ';')">
        <xsl:value-of select="substring-before($pText, ';')">
        <br />
        <xsl:call-template name="insertLinebreaks">
            <xsl:with-param name="pText" select="substring-after($pText, ';')"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>