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