Die Position eines Teilstrings suchen

(Auszug aus "XSLT Kochbuch" von Sal Mangano)

Problem

Sie wollen den Index eines Teilstrings innerhalb eines Strings ermitteln und nicht den Text vor oder nach dem Teilstring.

Lösung

XSLT 1.0

<xsl:template name="string-index-of">
  <xsl:param name="input"/>
  <xsl:param name="substr"/>
  <xsl:choose>
    <xsl:when test="contains($input, $substr)">
      <xsl:value-of select="string-length(substring-before($input, $substr))+1"/>
    </xsl:when>
    <xsl:otherwise>0</xsl:otherwise>
  </xsl:choose>
</xsl:template>

XSLT 2.0

<xsl:function name="ckbk:string-index-of">
  <xsl:param name="input"/>
  <xsl:param name="substr"/>
  <xsl:sequence select="if (contains($input, $substr)) then string-length(substring-before($input, $substr))+1 else 0"/>
</xsl:function>

Diskussion

Die Position eines Teilstrings innerhalb eines anderen Strings ist ganz einfach die Länge des Strings, der ihm vorangeht, plus 1. Wenn Sie sicher sind, dass der Zielstring den Teilstring enthält, können Sie einfach string-length(substring-before($value, $substr))+1 verwenden. Im Allgemeinen allerdings benötigen Sie eine Methode, um den Fall zu behandeln, dass der Teilstring fehlt. Hier wurde 0 als Kennzeichnung dieses Falles gewählt, Sie können sich aber auch für einen anderen Wert entscheiden, etwa -1 oder NaN.

  

<< zurück vor >>

 

 

 

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

Copyright © 2006 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT Kochbuch" 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.

O'Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de