2009-07-31 4 views
2

Je dois faire une déclaration où le test passe s'il n'y a qu'un astérisque dans une chaîne du document source.Trouver le nombre de caractères correspondant au modèle dans XSLT 1

Ainsi, quelque chose comme

<xslt:if test="count(find('\*', @myAttribute)) = 1)> 
    There is one asterisk in myAttribute 
</xslt:if> 

je besoin de la fonctionnalité pour XSLT 1, mais les réponses pour XSLT 2 sera apprécié aussi bien, mais ne faire accepter à moins que son impossible dans XSLT 1.

+0

Peut-être quelque chose comme stringlength (Replace ('[^ \ *]', '', @myAttribute)) == 1 fonctionnerait? – Hugo

+0

Terminé en utilisant cette règle: Simple astérisque ... Si vous avez de meilleures réponses, veuillez poster leur! – Hugo

Répondre

4

Dans XPath 1.0, nous pouvons le faire en supprimant tous les astérisques en utilisant translate et en comparant la longueur:

string-length(@myAttribute) - string-length(translate(@myAttribute, '*', '')) = 1 

Dans XPath 2.0, je ferais probablement ceci:

count(string-to-codepoints(@myAttribute)[. = string-to-codepoints('*')]) = 1 
1

Une autre solution qui devrait fonctionner dans XPath 1.0:

contains(@myAttribute, '*') and not(contains(substring-after(@myAttribute, '*'), '*')) 
+0

Bonne réponse. Il semble un peu plus précis que la question posée, mais fonctionne bien dans mon cas, puisque l'astérisque mettrait fin à la phrase. merci, mais la réponse xpath 2 est légèrement meilleure. – Hugo

Questions connexes