substring-before()-Funktion |
Diese Funktion liefert den Teil-String des ersten Arguments vor dem ersten Auftreten des zweiten Arguments im ersten Argument. Wenn das zweite Argument im ersten nicht vorkommt, gibt die Funktion substring-before() einen leeren String zurück.
Eingaben
Zwei Strings. Der erste String ist der String, der durchsucht werden soll und der zweite ist der String, nach dem im ersten String gesucht werden soll.
Ausgabe
Der Teil des ersten Arguments, der vor dem ersten Auftreten des zweiten Arguments vorkommt. Wenn das zweite Argument im ersten nicht vorkommt, gibt die Funktion einen leeren String zurück.
Definition
XPath-Abschnitt 4.2, Zeichenkettenfunktionen
Beispiel
Das folgende Stylesheet verwendet die benannte Vorlage replace-substring. Es übergibt drei Argumente an die Vorlage replace-substring: den ursprünglichen String, den Teil-String, nach dem im ursprünglichen String gesucht werden soll, und den Teil-String, der im Ziel-String den ursprünglichen Teil-String ersetzen soll. Die Vorlage replace-substring verwendet die Funktionen contains(), substring-after() und substring-before(). Hier das Beispiel-Stylesheet, das alle Vorkommnisse von World durch den String "Mundo" ersetzt:
    <?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>
Das Stylesheet erzeugt die folgenden Ergebnisse, und zwar unabhängig vom verwendeten XML-Eingabedokument:
    Hello Mundo!