Elemento <xsl:param>

Declara un parámetro con nombre que se puede utilizar dentro de un elemento <xsl:stylesheet> o un elemento <xsl:template>. Permite especificar un valor predeterminado.

<xsl:param
  name = QName
  select = Expression
</xsl:param>

Atributos

  • select
    El valor del atributo es una Expresiones y el valor de la variable es el objeto que resulta de evaluar la expresión. Cuando se especifica este atributo, el elemento <xsl:param> debe estar vacío.

Información del elemento

Número de apariciones

Ilimitado

Elementos primarios

xsl:stylesheet, xsl:template, xsl:transform

Elementos secundarios

xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, elementos resultantes

Comentarios

El valor especificado en el elemento <xsl:param> es un valor predeterminado para establecer el enlace. Cuando se invoca la plantilla u hoja de estilos que contiene <xsl:param>, se utilizan los parámetros pasados en lugar de los valores predeterminados.

El elemento <xsl:param> debe declararse como un elemento secundario directo de un elemento <xsl:template>. Si no se declara como elemento secundario directo, no se tendrá acceso al valor del elemento <xsl:param> y se producirá un error. Por ejemplo:

<xsl:template name="getcount">
   <xsl:element name="strong">
      <xsl:param name="counted">
         <xsl:value-of select="count(//book)"/>
      </xsl:param>
      Total Book Count: <xsl:value-of select="$counted"/>
   </xsl:element>
</xsl:template>

En el ejemplo anterior, el único elemento secundario directo del elemento <xsl:template> es el elemento <strong>. Así pues, el analizador no puede evaluar correctamente el valor del elemento <xsl:param> y se produce el siguiente error:

Nota

La palabra clave xsl:param no se puede utilizar aquí.

El modo correcto de colocar este elemento para que pueda ser evaluado en el contexto del elemento <xsl:template> sería:

<xsl:template name="getcount">
   <xsl:param name="counted">
      <xsl:value-of select="count(//book)"/>
   </xsl:param>
   <xsl:element name="strong">
      Total Book Count: <xsl:value-of select="$counted"/>
   </xsl:element>

El valor del parámetro puede ser un objeto de cualquier tipo que pueda ser emitido por una expresión. El elemento <xsl:param> puede especificar el valor de la variable de tres formas alternativas:

  • Si el elemento tiene un atributo select, el valor del atributo debe ser una expresión y el valor del parámetro es el objeto que resulta de la evaluación de la expresión. En este caso, el contenido del elemento debe estar vacío.

  • Si el elemento no tiene un atributo select y no tiene un contenido vacío como uno o varios nodos secundarios, el contenido especifica el valor. El contenido es una plantilla para la que se han creado instancias con el fin de proporcionar el valor del parámetro. El valor es un fragmento de árbol de resultados equivalente a un conjunto de nodos que contiene sólo un nodo raíz sencillo que posee como elemento secundario la secuencia de nodos que se produce al crear instancias para la plantilla. El identificador URI básico de los nodos del fragmento de árbol de resultados es el identificador URI básico del elemento.

    Si un miembro de la secuencia de nodos originada mediante la creación de instancias para la plantilla es un nodo de atributo o un nodo de espacio de nombres, se producirá un error, ya que un nodo raíz no puede tener un nodo de atributo o un nodo de espacio de nombres como elemento secundario.

  • Si el contenido está vacío y no tiene un atributo select, el valor del parámetro es una cadena vacía. Así,

    <xsl:param name="x"/>
    

    equivale a

    <xsl:param name="x" select="''"/>
    

    Nota

    Cuando se utiliza una parámetro para seleccionar nodos según la posición, tenga cuidado de no hacer lo siguiente: <xsl:param name="n">2</xsl:param> ... <xsl:value-of select="item[$n]"/>

    Esto podría resultar en el valor del primer elemento, ya que la variable "n" estará enlazada a un fragmento de árbol de resultados, no a un número. En vez de eso, utilice

    <xsl:param name="n" select="2"/>
    ...
    <xsl:value-of select="item[$n]"/>
    or
    <xsl:param name="n">2</xsl:param>
    ...
    <xsl:value-of select="item[number($n)]"/>
    

    Nota

    A continuación se muestra un modo adecuado para especificar el conjunto de nodos vacíos como el valor predeterminado de un parámetro. <xsl:param name="x" select="/.."/>

Ejemplo

En este ejemplo se define una plantilla con nombre para un "bloque numerado" con un argumento para controlar el formato del número.

Archivo XML (catmat.xml)

Ninguno; el archivo XSLT se llama a sí mismo. Vea el archivo XSLT en Internet Explorer.

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<lists>
   <ol>
      <li>the</li>
      <li>cat</li>
      <ol>
         <li>sat</li>
         <li>on</li>
         <li>the</li>
      </ol>
      <li>mat</li>
   </ol>
</lists>

Archivo XSLT (paramelem.xsl)

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="paramelem.xsl"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="ol/li">
   <br/>
   <xsl:call-template name="numbered-block"/>
</xsl:template>

<xsl:template match="ol//ol/li">
   <br/>&#xA0;&#xA0;&#xA0;
   <xsl:call-template name="numbered-block">
      <xsl:with-param name="format">a. </xsl:with-param>
   </xsl:call-template>
</xsl:template>

<xsl:template name="numbered-block">
   <xsl:param name="format">1. </xsl:param>
   <fo:block>
      <xsl:number format="{$format}"/>
      <xsl:apply-templates/>
   </fo:block>
</xsl:template>

</xsl:stylesheet>

Resultados

Este es el resultado con formato:

1. the 2. cat     a. sat     b. on     c. the 3. mat

A continuación se muestra el resultado del procesador, al que se han añadido espacios en blanco por razones de claridad.

<?xml version="1.0" encoding="UTF-16"?>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">1. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">2. cat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />   

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">a. sat</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />   

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">b. on</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />   

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">c. the</fo:block>
<br xmlns:fo="http://www.w3.org/1999/XSL/Format" />
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">3. mat</fo:block>

Consulte también

Referencia

Elemento <xsl:with-param>
Elemento <xsl:variable>
Elemento <xsl:call-template>