2008-12-01 15 views
6

Existe-t-il un moyen de trouver un nœud correspondant à une partie d'une valeur?XSLT, XPath et InStr

Si je donne les résultats suivants:

<competition id="100" name="Barclays Premier League"/> 
<competition id="101" name="CocaCola Championship" /> 
<competition id="102" name="CocaCola League 1" /> 

Compte tenu de la chaîne "Premier League" ou même "Prem", comment pourrais-je correspondre au noeud correct et obtenir id 100.

J'ai réussi cette en utilisant for-each et contient, mais c'est très inefficace et ne fonctionne pas assez vite pour nos besoins.

Répondre

14

La manipulation de chaînes n'est pas quelque chose d'extraordinaire, mais il y a quelques options.

Dans ce cas, vous pouvez essayer:

//competition[contains(@name,'Prem')] 

voir here pour plus d'options et de détails

+0

Et si vous voulez juste l'id alors // concurrence [contient (@name, "Prem")]/@ id –

+0

bah - trop utilisé pour travailler avec des jeux de nœuds – annakata

+0

le "//" est probablement déconseillé aussi avant tout le monde le mentionne - je ne connaissais pas d'autre structure à suivre évidemment. – annakata

1

Il y a aussi une fonction « matches », qui utilise des expressions régulières, mais cela est seulement disponible en XSL 2.0.

6

Utilisation:

        //competition[contains(@name, 'Prem')]/@id

Dans d'autres situations de fonctions telles que: starts-with() ou ends-with() (XPath 2.0 seulement) peuvent être utiles.