用字符串替换字符串的XSLT模板包括HTML标记



我有这个模板来用另一个字符串替换一个字符串:

<xsl:template name="X">
<xsl:param name="field"/>
<xsl:param name="target"/>
<xsl:param name="change"/>
<xsl:value-of select='replace($field, $target, $change )' />  
</xsl:template> 

我就是这样称呼它的:

<xsl:call-template name="X">
<xsl:with-param name="field" select="artist"/>
<xsl:with-param name="target" select="'\n'"/>
<xsl:with-param name="change" select="'&#10;'"/>
</xsl:call-template>

除了这里演示的情况外,这在大多数情况下都有效
我正在尝试替换字符串";\n〃;带有HTML换行符<br><br/>
我想要一个实际的新行,而不是输出中可见的标记。我知道它在\n上匹配,但我无法使换行发生。我要么得到一个文字<br>输出,否则什么也不发生。

您需要改变您的方法。您的模板使用的是与字符串一起使用的replace()。要替换为标记。我会用xsl:analyze-string代替:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
<xsl:variable name="break"><br/></xsl:variable>

<xsl:call-template name="X">
<xsl:with-param name="field" select="artist"/>
<xsl:with-param name="target" select="'n'"/>
<xsl:with-param name="change" select="$break"/>
</xsl:call-template>
</xsl:template>

<xsl:template name="X">
<xsl:param name="field"/>
<xsl:param name="target"/>
<xsl:param name="change"/>
<!-- <xsl:value-of select='replace($field, $target, $change )' />-->
<xsl:analyze-string select="$field" regex="{$target}">
<xsl:matching-substring>
<xsl:sequence select="$change"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template> 

</xsl:stylesheet>

相关内容

最新更新