XSLT Replace function not found

The replace function is only available in XSLT version 2.0, not in version 1.0 which is what Visual Studio uses. Just because you've specified version="2.0" doesn't mean that Visual Studio supports it.

Here's a template on codesling that implements string-replace in XSLT 1.0. You should be able to use it but I can't vouch for its efficiency.

(Taken from the link above)

<xsl:template name="string-replace-all">
  <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="string-replace-all">
        <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>

You'd call it like this:

<xsl:otherwise>
  <td style="border: solid 1px black; background-color:#00CC66;">
    <xsl:variable name="FeatureInfo" select="Text" />
    <xsl:call-template name="string-replace-all">
      <xsl:with-param name="text" select="$FeatureInfo"/>
      <xsl:with-param name="replace" select="Feature="/>
      <xsl:with-param name="by" select="TESTING"/>
    </xsl:call-template>
  </td>
</xsl:otherwise>

Replace is not valid in XSLT 1.0. You have "translate()", which might work for you, but replace() is XSLT 2, and not part of the MS .NET XML codebase. You can get it with some third party XML libraries though.


How about embedding a c# script to do the replacement?

Add the following to the bottom of your stylesheet:

<msxsl:script language="C#" implements-prefix="scr"> <![CDATA[ public string Replace(string stringToModify, string pattern, string replacement) { return stringToModify.Replace(pattern, replacement); } ]]> </msxsl:script>

Add a namespace attribute to the stylesheet element:

xmlns:scr="urn:scr.this"

Then implement as....

<xsl:value-of select="scr:Replace(description/text(), 'ABC', '123')"/>

Note: This is only supported on .NET Framework, Code blocks are not supported on .NET Core and .NET 5


For simple string replacement the translate function (available in xslt 1.0) worked fine for me.

I used it to strip out spaces for numeric values.