donné un numéro de formulaire comme: Je veux vous retrouver avec: p> donc j'ai besoin de trouver la position de Le deuxième soussecore p> Notez qu'il n'y a pas de motif ou de longueur standard à l'une des "sections" entre les souligneurs (donc je ne peux donc pas utiliser la sous-chaîne pour éliminer simplement la dernière section). P> Les solutions XPath 2.0 vont bien. p> p>
4 Réponses :
string-join(tokenize($s, '_')[position() <= 2], '')
@pavel_minaev a fourni des solutions XPath 1.0 AMD XPATH 2.0 qui fonctionnent s'il est connu à l'avance que le nombre de soulignements est 2.
Voici des solutions pour le problème plus difficile, où le nombre de nonDRSCORES ISN 'T statiquement connu fort> (peut être n'importe quel nombre): p> Xslt 1.0 strong>: p> Lorsque cette transformation est appliquée à n'importe quel document XML (non utilisé), le résultat correct souhaité est produit strong> : p>
solution plus facile dans XSLT 2.0:
codepoints-to-string(reverse(string-to-codepoints( substring-before( codepoints-to-string(reverse(string-to-codepoints($s))), '_'))))
Une idée généralisée - est d'obtenir l'index de la dernière occurrence en divisant la chaîne. p> index de dernière occurrence = longueur de chaîne ($ string) - Longueur de la dernière chaîne après la division p> p>
Une solution dépend d'une fonction d'extension que seuls quelques processeurs soutiennent à peine une "généralisée".
Que s'est-il passé avec le premier soulignement de votre échantillon?
Bonne question (+1). Consultez ma réponse pour les solutions XPath 2.0 et XSLT 1.0 au problème plus général lorsque le nombre de souligneurs n'est pas connu à l'avance. :)