在XPATH 2.0中,有一个函数允许我用另一个字符串替换字符串中的子字符串。我想用xalan做这件事。不幸的是,它不支持EXSLT方法str:replace,它只使用XSLT 1.0样式表。包括来自exslt.org的功能似乎不起作用。如果我尝试使用函数样式,它会抱怨它找不到str:replace。如果我尝试使用模板样式,它会抱怨它找不到节点集,即使它受支持。翻译是无用的,因为它只是一个字符交换。有什么想法吗?
答案 0 :(得分:3)
你可以编写自己的函数,它可以模仿xslt 2.0替换:
<xsl:template name="replace">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="replace">
<xsl:with-param name="text"
select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
如果你这样称呼它:
<xsl:variable name="replacedString">
<xsl:call-template name="replace">
<xsl:with-param name="text" select="'This'" />
<xsl:with-param name="replace" select="'This'" />
<xsl:with-param name="by" select="'That'" />
</xsl:call-template>
您生成的$ replacementString将具有值“That”