XSLT 2.0, fonction de remplacement: Comment remplacer un groupe apparié avec des majuscules?
Si vous avez un élément suivant dans mon fichier XSL:
<xsl:value-of select="replace(lower-case(@name), '_([a-z0-9])', '$1')" />
Par exemple de "get_polygene_lubricants' elle fait getpolygenelubricants'.
Ce que je veux faire est de remplacer la première lettre après '_' avec
les majuscules variante de la lettre. J'ai googlé, de lire la documentation,
mais je n'ai pas pu trouvé de solution dans XSLT pour cette simple
le remplacement.
Peut-être que quelqu'un sait si il est possible de XSLT 2.0?
- Merci pour clarifier les exigences du problème. J'ai corrigé ma réponse et maintenant, il produit exactement le résultat que vous attendez. S'il vous plaît, jetez un oeil 🙂
- Désolé, Il y a un bug dans la. Je ne pouvais pas lire votre dernier commentaire à moi. IE s'est écrasé, et maintenant je n'ai pas bouillonnent commentaire. Pourriez-vous, s'il vous plaît, répéter?
- Il est édité et produit de votre résultat, juste avec une seule expression XPath 🙂 avez-vous lu vos réponses?
Vous devez vous connecter pour publier un commentaire.
Édité: Par la clarification de l'affiche originale, la première chaîne délimitée par les traits de soulignement ne devrait pas avoir de départ la lettre en majuscule.
Cette solution ne permet pas l'utilisation de la récursivité et devrait être bien plus efficace.
Ici est la nouvelle solution:
Le résultat est exactement comme l'exige:
Ci-dessous est la vieille solution.
La fonction de remplacement() suppose que vous avez un remplacement fixe -- il n'est donc pas le meilleur outil pour résoudre ce problème.
Ici est un one-liner XPath 2.0 solution (et il peut certainement être utilisé dans le cadre d'une transformation XSLT 2.0 🙂 ):
Lorsque nous utilisons l'expression ci-dessus dans une transformation XSLT 2.0 comme ce:
et de l'appliquer sur le document XML suivant:
le résultat voulu est produit:
Vous pouvez le faire à l'aide d'un modèle, de manière récursive appelant lui-même pour parcourir les caractères dans la chaîne. Ce modèle doit prendre un paramètre de position, en commençant à 1
et en augmentation pour chaque appel au modèle. Lorsque '_' est trouvé, transformer char à côté de majuscules à l'aide de traduire(1.0) ou en majuscule(2.0)
Bien que déjà répondu, voici ma solution:
Utilisation: