我有这个功能试图用_
替换点和/或 -我只能使用xpath 1,所以替换函数不是一个选项。模板效果不是很好,因为如果我使用这样的东西:
FOO-BAR.THING-MADRID.html
它让我在屏幕上显示这个东西:
FOO-BAR.THING-MADRID.html
中间点未被替换。
有人可以帮助我吗?
<xsl:template name="replaceDots">
<xsl:param name="outputString"/>
<xsl:variable name="target">.</xsl:variable>
<xsl:variable name="source">-</xsl:variable>
<xsl:variable name="replacement">_</xsl:variable>
<xsl:choose>
<xsl:when test="contains($outputString,$source)">
<xsl:value-of select="concat(substring-before($outputString,$source),$replacement)" disable-output-escaping="yes"/>
<xsl:call-template name="replaceDots">
<xsl:with-param name="outputString" select="substring-after($outputString,$source)"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($outputString,$target)">
<xsl:value-of select="concat(substring-before($outputString,$target),$replacement)" disable-output-escaping="yes"/>
<xsl:call-template name="replaceDots">
<xsl:with-param name="outputString" select="substring-after($outputString,$target)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$outputString" disable-output-escaping="yes"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
答案 0 :(得分:2)
要用下划线替换所有点或短划线,您不需要<xsl:template>
。您可以使用:
<xsl:value-of select="translate(., '-.', '__')" />
如果你想保留".html"
,可以这样扩展:
<xsl:value-of select="
concat(
translate(substring-before(., '.html'), '-.', '__'),
'.hmtl'
)
" />
对于XSLT中的通用“字符串替换”模板,例如look at this question。