Descripción general de los parámetros XSLT
Los parámetros se pueden pasar a plantillas con o sin nombre. Dentro de la plantilla, los parámetros deben declararse y luego se puede hacer referencia a ellos anteponiendo su nombre con el signo de dólar ($).
Declaración de parámetros
El ámbito de un parámetro puede ser global o local. Un parámetro cuyo valor establece Junos OS en la inicialización del script debe definirse como un parámetro global. Las declaraciones de parámetros globales se colocan justo después de las declaraciones de la hoja de estilos. Una secuencia de comandos puede asignar un valor predeterminado al parámetro global, que se utiliza 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 deben declararse al principio de un bloque y su alcance se limita al bloque en el que se declaran. Dentro de una plantilla, los parámetros se declaran 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 convierte de forma predeterminada en una cadena vacía.
La siguiente plantilla print-host-name con nombre 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 obtiene acceso al valor del parámetro anteponiendo el nombre del parámetro con el signo de message dólar ($).
Pasar parámetros
Cuando se invoca una plantilla, se pasan argumentos a la plantilla mediante el elemento y name el <xsl:with-param> atributo. 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, se omite el parámetro. Opcionalmente, para cada parámetro que pase a una plantilla, puede definir un valor utilizando el select atributo o el contenido del <xsl:with-param> elemento.
El valor del parámetro que se usa en una plantilla depende de cómo se llame 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 predeterminado es 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 con nombre utilizará el valor predeterminado para el message parámetro definido 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, el script pasa el valor actual del parámetro si se inicializó previamente o genera un error si el parámetro nunca se declaró. 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 el script, y el ámbito es visible para el bloque, se utiliza el valor actual de message . Si message se declara en el script 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, incluye el parámetro y define un valor para el parámetro, la plantilla utiliza 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, por lo que la plantilla utiliza el valor new.
<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 con /, 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 de forma recursiva al configuration/system subárbol. El parámetro host se utiliza en el procesamiento de cualquier nodo 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 ningún valor predeterminado. Se genera un <inside> elemento que contiene el valor del host parámetro que se definió en la <xsl:with-param> etiqueta del 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 con nombre declara dos parámetros: dot, que de forma predeterminada es el nodo actual y changed, que de forma predeterminada es 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 diferente 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 a la plantilla puede incluir el dot parámetro y definir un origen distinto del nodo actual predeterminado, como se muestra a continuación:
<xsl:template match="system"> <xsl:call-template name="report-changed"> <xsl:with-param name="dot" select="../../> </xsl:call-template> </xsl:template>
Ejemplos adicionales
Para obtener ejemplos completos que utilizan el elemento en scripts de <xsl:param> automatización, consulte lo siguiente:
-
Ejemplo: Agregar un término final y luego aceptar a un firewall
- Ejemplo: configurar automáticamente interfaces lógicas y direcciones IP
-
Ejemplo: impedir la importación de la tabla de enrutamiento completa
-
Ejemplo: instrucciones de configuración require and restrict
-
Ejemplo: mostrar información de nombre de host DNS mediante un script operativo