Fonction substring-before()  
Renvoie la sous-chaîne du premier argument qui précède la première occurrence du second argument dans le premier argument. Si le second argument ne figure pas dans le premier argument, la fonction substring-before() renvoie une chaîne vide.
 
Entrées

Deux chaînes. La première chaîne représente la chaîne à rechercher, et la second chaîne représente la chaîne à rechercher dans la première chaîne.

 
Sortie

La portion du premier argument qui précède la première occurrence du second argument. Si le second argument ne figure pas dans le premier argument, la fonction renvoie une chaîne vide.

 
Définie dans

XPath section 4.2, Fonctions Chaîne.

 
Exemple

La feuille de style utilise le modèle nommé replace-substring. Elle transmet trois arguments au modèle replace-substring : la chaîne originale, la sous-chaîne à rechercher dans la chaîne originale et la sous-chaîne qui doit remplacer la sous-chaîne cible dans la chaîne originale. Le modèle replace-substring utilise largement les fonctions contains(), substring-after() et substring-before().

L'exemple de feuille de style est le suivant. Elle remplace toutes les occurrences de World par la chaîne "Mundo" :

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:variable name="test">
      <xsl:call-template name="replace-substring">
        <xsl:with-param name="original">Hello World!</xsl:with-param>
        <xsl:with-param name="substring">World</xsl:with-param>
        <xsl:with-param name="replacement">Mundo</xsl:with-param>
      </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="$test"/>
  </xsl:template>

  <xsl:template name="replace-substring">
    <xsl:param name="original"/>
    <xsl:param name="substring"/>
    <xsl:param name="replacement" select="''"/>
    <xsl:variable name="first">
      <xsl:choose>
        <xsl:when test="contains($original, $substring)">
          <xsl:value-of select="substring-before($original, $substring)"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$original"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:variable name="middle">
      <xsl:choose>
        <xsl:when test="contains($original, $substring)">
          <xsl:value-of select="$replacement"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>   </xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:variable name="last">
      <xsl:choose>
        <xsl:when test="contains($original, $substring)">
          <xsl:choose>
            <xsl:when test="contains(substring-after($original, $substring), 
                                      $substring)">
              <xsl:call-template name="replace-substring">
                <xsl:with-param name="original">
                  <xsl:value-of 
                    select="substring-after($original, $substring)"/>
                </xsl:with-param>
                <xsl:with-param name="substring">
                  <xsl:value-of select="$substring"/>
                </xsl:with-param>
                <xsl:with-param name="replacement">
                  <xsl:value-of select="$replacement"/>
                </xsl:with-param>
              </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="substring-after($original, $substring)"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>   </xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:value-of select="concat($first, $middle, $last)"/>
  </xsl:template>

</xsl:stylesheet>

La feuille de style produit les résultats suivants, peu importe le document XML utilisé comme entrée :

Hello Mundo!