有没有办法在XPATH 1上模拟正确替换功能?

时间:2010-09-16 09:32:18

标签: xpath

我有这个功能试图用_

替换点和/或 -

我只能使用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>

1 个答案:

答案 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