Wie man die letzte Vorkommen eines Zeichens in einem String mittels XSLT Reverse Find
findet
Das Finden spezifischer Zeichen in Strings kann eine häufige Aufgabe in der Programmierung sein, insbesondere beim Umgang mit URLs oder Dateipfaden. In XSLT gibt es zwar Funktionen, um das erste Vorkommen eines Zeichens zu finden, wir müssen jedoch möglicherweise das letzte Vorkommen eines Zeichens ermitteln, insbesondere beim Extrahieren von Dateinamen und -erweiterungen. Dieser Blogbeitrag präsentiert eine Lösung für ein typisches Problem: wie man ein Zeichen in einem String rückwärts findet und sinnvolle Informationen extrahiert.
Die Herausforderung: Extraktion von Dateierweiterungen
Betrachten Sie dieses Beispiel:
<mediaurl>http://www.blah.com/path/to/file/media.jpg</mediaurl>
Mit grundlegenden XSLT-Funktionen wie substring-before()
und substring-after()
können wir problemlos das erste Vorkommen des Punktes (.
) in der Date URL lokalisieren. Um jedoch den Dateinamen und seine Erweiterung abzurufen, müssen wir den letzten Punkt innerhalb des Strings identifizieren – eine Operation, die mit Standardfunktionen nicht einfach ist.
Warum benötigen wir das letzte Vorkommen?
Das Ziel ist es, den Dateinamen von seiner Erweiterung zu trennen. Zum Beispiel wollen wir aus der obigen URL extrahieren:
- Dateiname:
media
- Dateierweiterung:
jpg
Um dies zu erreichen, benötigen wir eine Methode, um effektiv den letzten .
im String zu lokalisieren.
Die Lösung: Eine benutzerdefinierte XSLT-Vorlage
Hier ist eine einfache und effektive Methode, um das letzte Vorkommen eines Zeichens in einem String mithilfe von XSLT 1.0 zu finden. Die Lösung besteht darin, eine rekursive Vorlage zu erstellen, die den String verarbeitet und die benötigten Teile abruft.
XSLT Code Implementierung
Hier ist eine Beispielvorlage, die dieses Ziel erreicht:
<xsl:template name="getExtension">
<xsl:param name="filename"/>
<xsl:choose>
<xsl:when test="contains($filename, '.')">
<xsl:call-template name="getExtension">
<xsl:with-param name="filename" select="substring-after($filename, '.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="getExtension">
<xsl:with-param name="filename" select="'http://www.blah.com/path/to/file/media.jpg'"/>
</xsl:call-template>
</xsl:template>
Erklärung des Codes
-
Vorlagen-Deklaration: Die
getExtension
-Vorlage ist dazu bestimmt, die Dateierweiterung aus einem vollständigen Dateinamen zu extrahieren. -
Parameter: Sie nimmt einen Parameter
$filename
, der den zu verarbeitenden String hält. -
Bedingte Logik:
- Wenn der Dateiname einen Punkt enthält, ruft sie sich rekursiv auf und übergibt den Substring nach dem ersten Punkt.
- Dies geht so lange weiter, bis sie den letzten Substring (die tatsächliche Erweiterung) erreicht, der als Ausgabe gedruckt wird.
-
Match Root Template: Die primäre Vorlage stimmt mit der Wurzel überein und initiiert den Aufruf von
getExtension
, indem sie die URL bereitstellt, aus der wir die Erweiterung extrahieren.
So verwenden Sie es
Um das oben stehende XSLT in Ihrem Projekt zu verwenden:
- Fügen Sie diesen Code in Ihr XSLT-Stylesheet ein.
- Ändern Sie die URL oder den Pfad in der
select
-Anweisung innerhalb der Wurzelvorlage nach Bedarf. - Verarbeiten Sie Ihre XML-Daten, um die Dateierweiterung nahtlos abzurufen!
Abschließende Gedanken
Das Finden des letzten Vorkommens eines Zeichens in einem String innerhalb der Grenzen von XSLT kann mit ein wenig Kreativität erreicht werden. Indem Sie rekursive Vorlagen nutzen, können Sie komplexe Strings zerlegen und wertvolle Informationen wie Dateinamen und -erweiterungen extrahieren, was Ihre Datenmanipulationsaufgaben verbessert.
Fühlen Sie sich frei, auf diesen Leitfaden zurückzugreifen, wann immer Sie mit ähnlichen Herausforderungen bei der Stringverarbeitung in XSLT konfrontiert sind!