Comment Rechercher à l’Envers la Dernière Occurrence d’un Caractère dans une Chaine en Utilisant XSLT

Trouver des caractères spécifiques dans des chaînes peut être une tâche courante en programmation, surtout lorsqu’il s’agit d’URLs ou de chemins de fichiers. En XSLT, bien qu’il existe des fonctions pour trouver la première occurrence d’un caractère, nous devons parfois récupérer la dernière occurrence d’un caractère, notamment lors de l’extraction de noms de fichiers et d’extensions. Cet article de blog présente une solution à un problème classique : comment rechercher à l’envers un caractère dans une chaîne et extraire des informations significatives.

Le Défi : Extraire les Extensions de Fichiers

Considérons cet exemple :

<mediaurl>http://www.blah.com/path/to/file/media.jpg</mediaurl>

En utilisant des fonctions de base de XSLT comme substring-before() et substring-after(), nous pouvons facilement localiser la première occurrence du point (.) dans l’URL du fichier. Cependant, pour récupérer le nom du fichier et son extension, nous devons identifier le dernier point dans la chaîne - une opération qui n’est pas simple avec les fonctions standard.

Pourquoi Avons-nous Besoin de la Dernière Occurrence ?

L’objectif est de séparer le nom du fichier de son extension. Par exemple, à partir de l’URL ci-dessus, nous voulons extraire :

  • Nom du Fichier : media
  • Extension du Fichier : jpg

Pour y parvenir, nous avons besoin d’une méthode pour localiser efficacement le dernier . dans la chaîne.

La Solution : Un Modèle XSLT Personnalisé

Voici une méthode simple et efficace pour trouver la dernière occurrence d’un caractère dans une chaîne en utilisant XSLT 1.0. La solution consiste à créer un modèle récursif qui traite la chaîne et récupère les parties requises.

Implémentation du Code XSLT

Voici un exemple de modèle qui atteint cet objectif :

<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>

Explication du Code

  • Déclaration du Modèle : Le modèle getExtension est conçu pour extraire l’extension de fichier à partir d’un nom de fichier complet.

  • Paramètre : Il prend un paramètre $filename, qui contient la chaîne à traiter.

  • Logique Conditionnelle :

    • Si le nom de fichier contient un point, il s’appelle récursivement, passant la sous-chaîne après le premier point.
    • Cela continue jusqu’à ce qu’il atteigne la dernière sous-chaîne (l’extension réelle), qui est ensuite imprimée en sortie.
  • Modèle de Correspondance Racine : Le modèle principal correspond à la racine et initie l’appel à getExtension, en fournissant l’URL dont nous extrayons l’extension.

Comment l’Utiliser

Pour utiliser le XSLT ci-dessus dans votre projet :

  1. Insérez ce code dans votre feuille de style XSLT.
  2. Modifiez l’URL ou le chemin dans l’instruction select au sein du modèle racine selon vos besoins.
  3. Traitez vos données XML pour récupérer l’extension de fichier sans problème !

Dernières Réflexions

Trouver la dernière occurrence d’un caractère dans une chaîne dans le cadre des contraintes de XSLT peut être réalisé avec un peu de créativité. En tirant parti des modèles récursifs, vous pouvez disséquer des chaînes complexes et extraire des informations précieuses comme les noms de fichiers et les extensions, ce qui améliore vos tâches de manipulation de données.

N’hésitez pas à vous référer à ce guide chaque fois que vous êtes confronté à des défis similaires de traitement de chaînes en XSLT !