2010-07-27 17 views
6

¿Qué es // en XSLT? (Por ejemplo $currentPage//node)¿Qué es // en XSLT?

+0

Buena pregunta (+1). Vea mi respuesta para una explicación completa y detallada. –

Respuesta

8

lo// en xslt? p.ej. ($ currentPage // nodo)

En XPath la abreviatura:

// is short for /descendant-or-self::node()/

El valor de algunos atributos de instrucciones XSLT (como el atributo select) debe haber una Expresión XPath.

Por lo tanto,

($currentPage//node) 

representa

($currentPage/descendant-or-self::node()/node) 

Esto selecciona todos los elementos nombrados node que son hijos de nodos que están ya sea contenido en la variable $currentPage o son descendientes de los nodos que están contenidos en la variable $currentPage.

hacer la nota que en la expresión proporcionado node() es una nodo-test (que selecciona todos los tipos de nodos en el eje descendant-or-self::, tales como elementos, los nodos de texto, comentarios y procesamiento-instrucciones.

En por otro lado, somePath/node es una abreviatura de somePath/child::node y sólo selecciona elementos nombrados node que son hijos del nodo de contexto.

recomiendo encarecidamente no utilizar el nombre node para un elemento con el fin de evitar esta confusión

+0

@Dimitre - Estoy empezando a pensar en lo que de otra manera sería una buena respuesta, pero el penúltimo párrafo es incorrecto. No serán hijos del nodo de contexto, serán hijos de los nodos seleccionados por 'somePath' – Alohci

+1

@Alohci: Sí y el "nodo de contexto" en cualquier momento es el nodo, desde el cual el siguiente paso de ubicación es realizado - esto significa que 'child :: node' se determina en' somePath/child :: node', el nodo de contexto es cualquier nodo que se selecciona mediante 'somePath'. Entonces, tanto usted como yo estamos diciendo lo mismo :) –

+0

'node()/node' es confuso.'node()' es una función predefinida, y 'node' es una variable de marcador de posición? 'node()/foo' sería menos confuso. – Joren

4

Eso parece que es parte de XPath, que se puede utilizar dentro de XSLT para buscar el árbol de nodos dado que coinciden con un camino. Es una tecnología similar a los selectores de CSS.

La doble barra hace una búsqueda descendiente en cualquier profundidad.

Por ejemplo:

elementa//elementb 

concordaría con cualquier elemento elementb que es un descendiente de un elemento elementa, incluso si hay otros niveles en el medio, por ejemplo:

<elementa> 
    <someelement> 
    <elementb> 
    </elementb> 
    </someelement> 
</elementa>