2009-04-02 19 views
17

Qualcuno può dirmi come stampare una variabile nella mia trasformazione XSL? Sembra una cosa abbastanza facile da fare ma non riesco a farlo. Ecco il codice che ho:Stampa del valore di una variabile XSL

<?xml version='1.0' encoding='UTF-8' ?> 
<xsl:stylesheet version="1.0" 
    xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template name="ControlledListStructure"> 
    <xsl:param name="xmlElem" /> 
    <xsl:param name="dataName" /> 

    <xsl:element name="{$xmlElem}"> 
     1: <xsl:text>{$xmlElem}</xsl:text>. 
     2: {$xmlElem}. 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

Se ho chiamato questo modello con un valore per xmlElem di "Wibble" (una stringa - non un nodo), vorrei avere il seguente output:

<Wibble> 
     1: {$xmlElem}. 
     2: {$xmlElem}. 
</Wibble> 

Quindi il mio parametro si avvicina correttamente, non riesco ad accedere correttamente. Qualcuno può dirmi come posso ottenere $ xmlElem di stampare correttamente in modo che vedo:

<Wibble> 
     1: Wibble. 
     2: Wibble. 
</Wibble> 

Grazie per ogni ingresso.

+1

Ho riempito alcuni spazi vuoti lasciati dalle risposte precedenti. Buona domanda! –

+1

Si prega di considerare la risposta di Dimitre come "Accettata" considerando che la sua risposta è altamente informativa e spiega il "perché" non solo il "come". Grazie! –

risposta

31

Tutte le risposte mancano qualcosa di importante: leggere oltre:

qualcuno può dirmi come stampare una variabile nel mio XSL trasformare? Sembra una cosa abbastanza semplice da fare ma non riesco a sembrare a farlo.

In XSLT 1.0 ci sono due modi principali di produzione dei contenuti di un <xsl:variable>, seconda che esso contiene un valore scalare (stringa, numero o booleano), o ha un valore strutturato - un node- set (uno o più nodi da un documento XML (s)):

  1. <xsl:value-of select="$yourscalarVariableName"/> Utilizzare questo per produrre un valore scalare. In realtà produce un nodo di testo, contenente questo valore scalare.

  2. <xsl:copy-of select="$yourStructuredVariableName"/> Da utilizzare per produrre una copia di tutti i nodi contenuti nella variabile.

E 'molto importante sapere che se un xsl:variable contiene una lista di nodi e l'istruzione <xsl:value-of ...> viene utilizzato, sarà prodotto solo il valore di stringa del primo nodo. Questo è un errore frequente e una FAQ.

C'è una terza via: se il <xsl:variable> deve essere usato nella produzione di un attributo:

<someLiteralResultElement someAttribute="{$theVariable}"/> 

L'espressione XPath nelle parentesi graffe (chiamati AVT -- attribute-value-template) viene valutata e il risultato è inserita in valore dell'attributo.

In XSLT 2.0, l'istruzione <xsl:value-of .../>, quando eseguito non in modalità di compatibilità, produce un elenco di nodi di testo - uno per ogni nodo contenuto nella xsl:variable. Quando viene eseguito in modalità di compatibilità (con l'attributo version="1.0" specificato), l'istruzione <xsl:value-of> si comporta nello stesso modo in XSLT 1.0.

In Xslt 2.0<xsl:copy-of> si comporta allo stesso modo di XSLT 1.0. Tuttavia, si consiglia di utilizzare la nuova istruzione <xsl:sequence>, poiché la prima produce una nuova copia di ogni nodo, mentre <xsl:sequence> non produce nuove copie di nodi.

+0

+1 Molto informativo e ben fatto! –

+0

@ Andrew-Hare Grazie, apprezzo molto la tua opinione! –

10

Prova questo:

<xsl:value-of select="$xmlElem"/> 
+0

Pensi che l'avrei provato! Grazie. –

+0

A volte la soluzione più semplice è la più elusiva! Sono contento di poter aiutare :) –

4

È possibile utilizzare:

<xsl:value-of select="$xmlElem" /> 
3

La sintassi {$ xmlElem} funziona solo all'interno di un attributo. Hai bisogno di:

<xsl:value-of select="$xslElem" /> 
Problemi correlati