EN ESTA PÁGINA
Descripción general de plantillas XSLT
Una secuencia de comandos XSLT consta de uno o más conjuntos de reglas denominados plantillas. Cada plantilla es un segmento de código que contiene reglas que se aplican cuando se hace coincidir un nodo especificado. Utilice el <xsl:template>
elemento para crear plantillas.
Hay dos tipos de plantillas, denominadas y sin nombre (o coincidencia), y se describen en las siguientes secciones.
Plantillas sin nombre (coincidencia)
Las plantillas sin nombre, también conocidas como plantillas de coincidencia, incluyen un match
atributo que contiene una expresión XPath para especificar los criterios para los nodos en los que se debe invocar la plantilla. En el ejemplo siguiente, la plantilla se aplica al elemento denominado route
que es un elemento secundario del contexto actual y que tiene un elemento secundario denominado next-hop
cuyo valor comienza con la cadena 10.10.
.
<xsl:template match="route[starts-with(next-hop, '10.10.')]"> <!-- ... body of the template ... --> </xsl:template>
De forma predeterminada, cuando la XSLT procesa un documento, recursivamente atraviesa toda la jerarquía de documentos, inspecciona cada nodo y busca una plantilla que coincida con el nodo actual. Cuando se encuentra una plantilla coincidente, se evalúa el contenido de esa plantilla.
El <xsl:apply-templates>
elemento se puede utilizar dentro de una plantilla sin nombre para limitar y controlar el recorrido jerárquico predeterminado de los nodos de XSLT. Si el <xsl:apply-templates>
elemento tiene un select
atributo, solo se atraviesan los nodos que coincidan con la expresión XPath definida por el atributo. De lo contrario, todos los elementos secundarios del nodo de contexto se atraviesan. Si el select
atributo está incluido, pero no coincide con ningún nodo, no se atraviesa nada y no pasa nada.
En el ejemplo siguiente, la regla de plantilla coincide con el <route>
elemento de la jerarquía XML. Todos los nodos que contienen un changed
atributo se procesan. Todos los <route>
elementos que contienen un changed
atributo se sustituyen por un <new>
elemento.
<xsl:template match="route"> <new> <xsl:apply-templates select="*[@changed]"/> </new> </xsl:template>
El uso de plantillas sin nombre permite que la secuencia de comandos ignore la ubicación de una etiqueta en la jerarquía XML. Por ejemplo, si desea convertir todas las <author>
etiquetas en <div class="author">
etiquetas, el uso de plantillas le permite escribir una sola regla que convierta todas las <author>
etiquetas, independientemente de su ubicación en el documento XML de entrada.
Para obtener más información acerca de cómo se usan las plantillas sin nombre en las secuencias de comandos, consulte xsl:template match="/" Template.
Plantillas con nombre
Las plantillas con nombre funcionan como funciones en lenguajes de programación tradicionales, aunque con una sintaxis detallada. Cuando aumenta la complejidad de una secuencia de comandos o un segmento de código aparece en varios lugares, puede modularizar el código y crear plantillas con nombre. Al igual que las funciones, las plantillas con nombre aceptan argumentos y se ejecutan solo cuando se llama explícitamente.
Para crear una plantilla con nombre, use el <xsl:template>
elemento y defina el name
atributo, que es similar a un nombre de función en lenguajes de programación tradicionales. Use la <xsl:param>
etiqueta y su name
atributo para definir parámetros para la plantilla con nombre e, opcionalmente, incluya el select
atributo para declarar valores predeterminados para cada parámetro. El select
atributo puede contener expresiones XPath. Si el select
atributo no está definido, el parámetro se establece de forma predeterminada en una cadena vacía.
En el ejemplo siguiente se crea una plantilla denominada my-template
y se definen tres parámetros, uno de los cuales es predeterminado para la cadena false
y uno de los cuales tiene como valor predeterminado el contenido del nodo de elemento denominado name
que es un elemento secundario del nodo de contexto actual. Si la secuencia de comandos llama a la plantilla y no pasa un parámetro, se usa el valor predeterminado.
<xsl:template name="my-template"> <xsl:param name="a"/> <xsl:param name="b" select="'false'"/> <xsl:param name="c" select="name"/> <!-- ... body of the template ... --> </xsl:template>
Para invocar una plantilla con nombre en una secuencia de comandos, use el <xsl:call-template>
elemento. El name
atributo es obligatorio y define el nombre de la plantilla a la que se llama. Cuando se procesa, el <xsl:call-template>
elemento se sustituye por el contenido del <xsl:template>
elemento que nombra.
Cuando invoca una plantilla con nombre, puede pasar argumentos a la plantilla incluyendo el <xsl:with-param>
elemento secundario y especificando el name
atributo. El valor del <xsl:with-param>
name
atributo debe coincidir con un parámetro definido en la plantilla real; de lo contrario, el parámetro se ignora. Opcionalmente, puede establecer un valor para cada parámetro con el select
atributo o el contenido del <xsl:with-param>
elemento. Si no define un valor para el parámetro en el entorno de llamada, la secuencia de comandos pasa el valor actual del parámetro si se inicializaba anteriormente o genera un error si el parámetro nunca se declaró. Para obtener más información acerca de cómo pasar parámetros, consulte Descripción general de parámetros de XSLT.
En el ejemplo siguiente, se llama a la plantilla my-template
con el parámetro c
que contiene el contenido del nodo de elemento denominado other-name
que es un elemento secundario del nodo de contexto actual.
<xsl:call-template name="my-template"> <xsl:with-param name="c" select="other-name"/> </xsl:call-template>
Para obtener un ejemplo que muestra cómo usar plantillas con nombre en una secuencia de comandos de confirmación, consulte Ejemplo: Requerir y restringir instrucciones de configuración.