我有一个带有参数字符串Test的xslt模板,其中包含&#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中完成?
答案 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>