2010-07-14 22 views
5

Ho un problema.Come passare i parametri a XSLT?

Ho un file XML che contiene informazioni su 100 corsi.

Ho un file XSL che visualizza in modo carino l'elenco di 100 corsi.

Ma cosa succede se voglio visualizzare solo 1 corso. Posso passare un parametro al file XSLT per dirgli di visualizzare solo "ENGL 100"?

L'XML simile a questa:

<document> 
<menu> 
    <item> 
     <name>MTH 300</name> 
     <brief>Mathematics Skill Development</brief> 
     <description>A course in the fundamentals of ...</description> 
    </item> 
    <item> 
     <name>MTH 301</name> 
     <brief>Basic Algebra</brief> 
     <description>An introduction to algebra, ...</description> 
    </item> 
... 

So che potrei scrivere un file XSLT denominato "eng100.xsl" per scorrere l'XML e visualizzare solo ITA 100, ma io non voglio avere scrivere dozzine di questi file

L'XML è dinamico e sono in grado di controllarlo. Voglio che il file XSLT sia statico e non cambi mai.

C'è un modo per passare i parametri nell'XSLT?

+1

Si prega di notare che la risposta dipende in parte dal motore XSLT che si sta utilizzando e da come lo si sta invocando. –

risposta

6

È possibile passare parametri a XSLT, il modo in cui questo viene eseguito dipende dal processore XSLT, ma solitamente come argomenti di comando aggiuntivi, se si tratta di un processore da riga di comando.

si dichiara parametri utilizzando

<xsl:param name="courseName" select"initialValue"/> 

È quindi possibile verificare questo parametro nel vostro XSLT, e invocare un modello diverso a seconda del suo valore. Ad esempio, se il parametro è vuoto, quindi richiama il modello corrente che elabora tutti gli elementi, altrimenti richiama un modello che elabora solo gli elementi quando il nome dell'elemento è uguale al valore del parametro. Puoi farlo con un test

<xsl:template match="item"> 
     <xsl:if test="$courseName=name(./name)"> 
     <xsl:call-template name="yourOriginalTemplate"/> 
     </xsl:if> 
    </xsl:template> 

Ma filtrando e formattando, stai mescolando due problemi in un unico file. Vorrei separare la selezione degli elementi XML dalla formattazione - avere due file xslt per questo ed eseguirli come una pipeline.

+0

Buona risposta. +1. –

+0

Inoltre, per alcuni scenari, è possibile utilizzare un documento di input "metadati" che guida la trasformazione e accede al documento "dati" con la funzione 'document()'. Questo avrà un costo in termini di efficienza. –

+3

Cosa succede se il documento xml ha un'istruzione di elaborazione È possibile passare il parametro xsl al file xml con url-encoded nome = valore parametro? Voglio dire, posso fare qualcosa del genere allora: mycontent.xml? CourseName = MTH300 – brighty

Problemi correlati