fn:substring-before

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

   

Kategorie: Stringfunktionen – Manipulation

Herkunft: XPath 1.0

Rückgabewert: Ein String xs:string; der Teilstring eines Eingabestrings, beginnend am Anfang des Eingabestrings bis zum ersten Zeichen vor dem ers­ten Auftreten eines übergebenen Vergleichsstrings.

Aufruf/Argumente:

fn:substring-before($eingabe, $vergleichsstring, $collation-URI?)

$eingabe:
Obligatorisch. Der zu untersuchende String xs:string. Handelt es sich bei dem Argument nicht um einen String, so wird ein Typfehler gemeldet. Die leere Sequenz ist als Wert zugelassen und wird wie der leere String behandelt.

$vergleichsstring:
Obligatorisch. Ein Wert in Form eines Strings xs:string, nach dessem ersten Auftreten im Eingabestring gesucht wird. Der Teilstring wird ab dem ersten Auftreten des Vergleichsstrings bis zum Ende des Eingabe­strings ausgegeben. Handelt es sich bei dem Argument nicht um einen String, so wird ein Typfehler gemeldet. Die leere Sequenz ist als Wert zugelassen und wird wie der leere String behandelt.

$collation-URI: (neu in XPath 2.0)
Optional. Das dritte Argument besteht aus einem String xs:string, der den URI-String der anzuwendenden Collation benennt. Der Wert muss lexikalisch dem Typ xs:anyURI entsprechen. Wird kein drittes Argument übergeben, so wird für den Vergleich die Unicode Codepoint Collation herangezogen. Dieses Argument steht in XPath 1.0 nicht zur Verfügung.

Verwendungszweck:

Die Funktion fn:substring-before() gibt denje­nigen Teil eines Eingabestrings zurück, der dem ersten Vorkommen eines Ver­gleichsstrings im Eingabestring vorangeht. Der Vergleichsstring kann aus einem einzelnen Zeichen oder einer Zeichenkette bestehen.

Ist der Teststring nicht im Eingabestring enthalten oder ist Eingabestring oder Vergleichsstring leer (Beispiel 2), so wird ein leerer String zurückgegeben. Das­selbe passiert jedoch auch, wenn der Eingabestring mit dem Vergleichsstring beginnt. Um diesen Umstand zu überprüfen, kann man fn:contains() zu Hilfe nehmen.

Wird der Funktion kein drittes Argument zur Nennung einer Collation übergeben, so findet der Stringvergleich anhand der Unicode Codepoint Collation statt. Es wird also ausdrücklich nicht die Default-Collation des Systems herangezogen. Das Verhalten von fn:substring-before() geht damit konform mit denjenigen Stringfunktionen, die reguläre Ausdrücke verwenden, also fn:mat­ches(), fn:replace() und fn:tokenize().

Hinweis – Überprüfung auf Übereinstimmung am Stringbeginn
Zu Überprüfung des Anfangs eines Strings ist die Funktion fn:starts-with() besser geeignet.

Verhalten unter XPath 1.0:
In XPath 1.0 werden die Argumente, falls es sich nicht um Strings handelt, nach den Regeln der Umwandlungsfunktion string() automatisch in Strings verwandelt. Ist das erste Argument ein leerer Nodeset, so wird ein leerer String zurückge­geben. In XPath 2.0 wird dagegen eine leere Sequenz () zurückgegeben, wenn ein beliebiger der ersten zwei Operanden die leere Sequenz ist.

Beispiele:

Beispiel 1 – Einfache Anwendung auf zwei Strings:

fn:substring-before('Das ist ein Beispiel', 'ist')

ergibt: 'Das '

Es wird der unmittelbar dem Vergleichsstring vorangehende Substring des Ein­gabestrings zurückgegeben – in diesem Fall mit folgendem Leerzeichen.

Beispiel 2 – Leerer String als Vergleichsstring:

fn:substring-before('Das ist ein Beispiel', '')

ergibt ''

Es wird der leere String zurückgegeben. Dies beruht auf der Prämisse, dass am Beginn jedes Strings stets ein leerer String existiert. Die Tatsache, dass man sich auch am Ende jedes Strings einen leeren String denken kann, ändert nichts, da der Teilstring vor dem ersten Auftreten des Vergleichsstrings zurückgegeben wird. Hier greift der Umstand, dass der Eingabestring mit dem Vergleichsstring beginnt.

Beispiel 3 – Anwendung bei rekursiver Stringverarbeitung:

Ein ausführliches Beispiel (Beispiel 3) finden Sie bei den Beschreibungen zur Funktion fn:substring-after().

Funktionsdefinition:

XPath 1.0:

substring-before(string, string) => string

XPath 2.0:

fn:substring-before($arg1 as xs:string?,
                    $arg2 as xs:string?) as xs:string

fn:substring-before($arg1 as xs:string?,
                    $arg2 as xs:string?,
                    $collation as xs:string) as xs:string

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn