Descripción general de parámetros XSLT
Los parámetros se pueden pasar a plantillas con o sin nombre. Dentro de la plantilla, los parámetros se deben declarar y luego se pueden hacer referencia mediante el prefijo de su nombre con el signo de dólar ($).
Declarar parámetros
El alcance de un parámetro puede ser global o local. Un parámetro cuyo valor es establecido por Junos OS en la inicialización de script debe definirse como un parámetro global. Las declaraciones de parámetros globales se colocan justo después de las declaraciones de hoja de estilos. Una secuencia de comandos puede asignar un valor predeterminado al parámetro global, que se usa en caso de que Junos OS no le dé un valor al parámetro.
<?xml version="1.0" standalone="yes"?> <xsl stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" xmlns:ext="http://xmlsoft.org/XSLT/namespace" version="1.0"> <!-- global parameter --> <xsl:param name="interface1"/>
Los parámetros locales se deben declarar al principio de un bloque y su ámbito está limitado al bloque en el que se declaran. Dentro de una plantilla, se declaran los parámetros mediante la etiqueta y name
el <xsl:param>
atributo. Opcionalmente, declare valores predeterminados para cada parámetro incluyendo el select
atributo, que puede contener expresiones XPath. Si se invoca una plantilla sin el parámetro, se evalúa la expresión predeterminada y los resultados se asignan al parámetro. Si no define un valor predeterminado en la plantilla, el parámetro se configura por defecto en una cadena vacía.
La siguiente plantilla print-host-name
denominada declara el parámetro message
y define un valor predeterminado:
<xsl:template name="print-host-name"> <xsl:param name="message" select="concat('host-name: ', system/host-name)"/> <xsl:value-of select="$message"/> </xsl:template>
La plantilla accede al valor del message
parámetro prefijando el nombre del parámetro con el signo de dólar ($).
Pasar parámetros
Cuando se invoca una plantilla, se pasan argumentos a la plantilla mediante el elemento y name
atributo<xsl:with-param>
. El valor del <xsl:with-param>
name
atributo debe coincidir con el nombre de un parámetro definido en la plantilla real; de lo contrario, el parámetro se omite. Opcionalmente, para cada parámetro que pase a una plantilla, puede definir un valor mediante el select
atributo o el contenido del <xsl:with-param>
elemento.
El valor de parámetro que se usa en una plantilla depende de cómo se llama a la plantilla. Los tres ejemplos siguientes, que llaman a la print-host-name
plantilla, ilustran los posibles entornos de llamada.
Si llama a una plantilla pero no incluye el <xsl:with-param>
elemento para un parámetro específico, se evalúa la expresión predeterminada definida en la plantilla y los resultados se asignan al parámetro. Si no hay ningún valor predeterminado para ese parámetro en la plantilla, el parámetro se predeterminada a una cadena vacía. En el ejemplo siguiente se llama a la plantilla print-host-name
con nombre, pero no se incluye ningún parámetro en la llamada. En este caso, la plantilla denominada utilizará el valor predeterminado para el message
parámetro que se definió en la print-host-name
plantilla o una cadena vacía si no existe ningún valor predeterminado.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"/> </xsl:template>
Si llama a una plantilla e incluye un parámetro, pero 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 inicializó anteriormente o genera un error si el parámetro nunca se ha declarado. En el ejemplo siguiente se llama a la plantilla print-host-name
con nombre y se pasa el message
parámetro, pero no se incluye un valor. Si message
se declara e inicializa en la secuencia de comandos y el ámbito es visible para el bloque, se utiliza el valor actual de message
. Si message
se declara en la secuencia de comandos pero no se inicializa, el valor de message
será una cadena vacía. Si message
no se ha declarado, la secuencia de comandos produce un error.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"> <xsl:with-param name="message"/> </xsl:call-template> </xsl:template>
Si llama a una plantilla, incluya el parámetro y defina un valor para el parámetro, la plantilla usa el valor proporcionado. En el ejemplo siguiente se llama a la plantilla print-host-name
con nombre con el message
parámetro y un valor definido, de modo que la plantilla use el nuevo valor.
<xsl:template match="configuration"> <xsl:call-template name="print-host-name"> <xsl:with-param name="message" select=concat"('Host-name passed in: ', system/host-name)"/> </xsl:call-template> </xsl:template>
Ejemplo: parámetros y plantillas de coincidencia
La siguiente plantilla coincide en /
, la raíz del documento XML. A continuación, genera un elemento denominado <outside>
, que se agrega al documento de salida e indica al proceso de administración de Junos OS (mgd) que aplique plantillas recursivamente al configuration/system
subárbol. El parámetro host
se utiliza en el procesamiento de cualquier nodos coincidente. El valor del host
parámetro es el valor de la host-name
instrucción en el nivel [edit system
] de la jerarquía de configuración.
<xsl:template match="/"> <outside> <xsl:apply-templates select="configuration/system"> <xsl:with-param name="host" select="configuration/system/host-name"/> </xsl:apply-templates> </outside> </xsl:template>
La siguiente plantilla coincide con el <system>
elemento, que es la parte superior del subárbol seleccionado en el ejemplo anterior. El host
parámetro se declara sin valor predeterminado. Se <inside>
genera un elemento que contiene el valor del host
parámetro que se definió en la <xsl:with-param>
etiqueta en el ejemplo anterior.
<xsl:template match="system"> <xsl:param name="host"/> <inside> <xsl:value-of select="$host"/> </inside> </xsl:template>
Ejemplo: parámetros y plantillas con nombre
La siguiente plantilla report-changed
denominada declara dos parámetros: dot
, que es el valor predeterminado para el nodo actual y changed
, que es predeterminado para el changed
atributo del nodo dot
.
<xsl:template name="report-changed"> <xsl:param name="dot" select="."/> <xsl:param name="changed" select="$dot/@changed"/> <!-- ... --> </xsl:template>
La siguiente estrofa llama a la report-changed
plantilla y define un origen para el changed
atributo distinto del origen predeterminado definido en la report-changed
plantilla. Cuando se invoca la report-changed
plantilla, utilizará el origen recién definido para el changed
atributo en lugar del origen predeterminado.
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="changed" select="../@changed"/> </xsl:call-template> </xsl:template>
Del mismo modo, la llamada de plantilla puede incluir el dot
parámetro y definir un origen distinto al nodo actual predeterminado, como se muestra aquí:
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="dot" select="../../> </xsl:call-template> </xsl:template>