Condividi tramite


Elemento <xsl:param>

Dichiara un parametro denominato da utilizzare all'interno di un elemento <xsl:stylesheet> o un elemento <xsl:template>. Consente di specificare un valore predefinito.

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

Attributi

  • name
    Obbligatorio. Specifica il Nomi completi (XSLT) del parametro.

  • select
    Il valore dell'attributo è un'Espressioni (XSLT) e il valore della variabile è l'oggetto che risulta dalla valutazione dell'espressione. Quando viene specificato questo attributo, l'elemento <xsl:param> deve essere vuoto.

Informazioni sull'elemento

Numero di occorrenze

Illimitato

Elementi padre

xsl:stylesheet, xsl:template, xsl:transform

Elementi figlio

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, elementi di output

Note

Il valore specificato nell'elemento <xsl:param> è un valore predefinito per l'associazione. Quando viene richiamato il modello o il foglio di stile contenente <xsl:param> , vengono passati i parametri utilizzati al posto dei valori predefiniti.

L'elemento <xsl:param> deve essere dichiarato come elemento figlio diretto di un elemento <xsl:template>. Se non viene dichiarato come elemento figlio diretto, non sarà possibile accedere al valore dell'elemento <xsl:param> e si verificherà un errore. Ad esempio:

<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>

Nell'esempio precedente l'unico elemento figlio diretto dell'elemento <xsl:template> è l'elemento <strong>. In quanto tale, il valore dell'elemento <xsl:param> non può essere valutato correttamente dal parser e si verifica il seguente errore:

Nota

In questo caso non è possibile utilizzare la parola chiave xsl:param.

Il metodo corretto per inserire l'elemento e valutarlo nel contesto dell'elemento <xsl:template> è il seguente:

<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>

Il valore del parametro può essere un oggetto di qualsiasi tipo che può essere restituito da un'espressione. L'elemento <xsl:param> può specificare il valore della variabile in tre possibili modi:

  • Se l'elemento presenta un attributo select, il valore dell'attributo deve essere un'espressione e il valore del parametro è l'oggetto risultante dalla valutazione dell'espressione. In questo caso il contenuto dell'elemento deve essere vuoto.

  • Se l'elemento non dispone di un attributo select e dispone di contenuto non vuoto, ad esempio di uno o più nodi figlio, il contenuto specifica il valore. Il contenuto è un modello di cui è stata creata un'istanza per fornire il valore del parametro. Il valore è un frammento di albero risultato equivalente a un set di nodi contenente un singolo nodo radice i cui nodi figlio sono la sequenza di nodi prodotta creando un'istanza del modello. L'URI di base dei nodi nel frammento di albero risultato è l'URI di base dell'elemento.

    Si verifica un errore se un membro della sequenza dei nodi prodotta dalla creazione di un'istanza del modello è un nodo Attribute o un nodo dello spazio dei nomi in quanto un nodo radice non può disporre di un nodo Attribute o di un nodo dello spazio dei nomi come nodo figlio.

  • Se il contenuto è vuoto e non presenta l'attributo select, il valore del parametro è una stringa vuota. Pertanto

    <xsl:param name="x"/>
    

    equivale a

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

    Se si utilizza un parametro per selezionare i nodi in base alla posizione, fare attenzione a non utilizzare:

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

    Non verrà generato un numero, bensì il valore del primo elemento item, perché la variabile "n" sarà associata al frammento di albero risultato. In alternativa, utilizzare

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

    oppure

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

    Per specificare un set di nodi vuoto come valore predefinito di un parametro, utilizzare <xsl:param name="x" select="/.."/>

Esempio

In questo esempio viene definito un modello denominato per un "blocco numerato", con un argomento per controllare il formato del numero.

File XML (catmat.xml)

<?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>

File 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>

Output

L'output formattato è il seguente:

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

Di seguito è indicato l'output del processore. Per maggiore chiarezza sono stati aggiunti spazi vuoti.

<?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>

Vedere anche

Riferimenti

Elemento <xsl:with-param>

Elemento <xsl:variable>

Elemento <xsl:call-template>