2008-12-01 22 views
6

¿Hay alguna manera de encontrar un nodo que coincida con parte de un valor?XSLT, XPath e InStr

Si tengo el siguiente:

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

Dada la cadena "Premier League" o incluso "Prem", ¿cómo iba a coincidir con el nodo correcto y obtener ID 100.

He conseguido este usando for-each y contains, pero esto es muy ineficiente y no funciona lo suficientemente rápido para nuestros requerimientos.

Respuesta

14

El manejo de cadenas no es algo que XSLT sea increíble, pero hay algunas opciones.

En este caso se puede tratar de:

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

ver here para más opciones y detalles

+0

Y si solo quiere la id // competencia [contiene (@nombre, "Prem")]/@ id –

+0

bah - demasiado acostumbrado a trabajar con conjuntos de nodos – annakata

+0

el "//" probablemente tampoco sea aconsejable antes que nadie lo menciona, simplemente no conocía ninguna otra estructura en la ruta obviamente. – annakata

1

También hay una función de "coincidencias", que utiliza expresiones regulares, pero esto sólo está disponible en XSL 2.0.

6

Uso:

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

En otras situaciones funciones tales como: starts-with() o ends-with() (XPath 2.0 solamente) pueden ser útiles.

Cuestiones relacionadas