gototopgototop
 
Sei in: Home Page Corso XSLT Iterare su un insieme di nodi con XSLT

Iterazione su un insieme di nodi: <xsl:for-each>

Vedremo ora come fare per elaborare e trasformare un determinato elemento, con un´altra tecnica: l´iterazione. Lo faremo attraverso <xsl:for-each>. Questo elemento permette di iterare attraverso un insieme di nodi ed operare su di essi separatamente. L´enunciato <xsl:for-each> assomiglia molto a quello presente in molti linguaggi di programmazione: eseguire un ciclo (loop) un determinato numero di volte, pari a quelle stabilite da noi nella scrittura dello stesso enunciato. Un esempio è:

For i=1 to 10
' esegue il loop
Next

XSLT ha un costrutto molto simile, non nella forma, bensì nel contenuto. Questo elemento ha un attributo select attraverso il quale si seleziona l´elemento, o gli elementi, che dovranno essere elaborati con una espressione XPath. Vediamo subito un esempio, così ci si rende conto di cosa stiamo parlando. Prendiamo un documento XML che abbiamo usato in precedenza: persone.xml. Ho apportato una modifica al file sorgente di esempio. Applichiamo l´elemento <xsl:for-each> invece di modelli basati sulla corrispondenza. Il foglio di stile mostra su quale elemento, o elementi, interverremo.

Il documento XSLT, come avrete notato, usa un solo modello; esso trova corrispondenza con la radice del sorgente. Al posto di utilizzare xsl:apply-templates, il modello contiene elementi <xsl:for-each> affinchè si vada ad operare in maniera più precisa con il nodo. Il codice della riga:

<xsl:for-each select="persone/persona">

seleziona tutti gli elementi "persona", figli di "persone". Ecco la prima differenza con i modelli. Un modello che corrisponde all´elemento "persona", corrisponderà a qualunque elemento con lo stesso nome (e questo lo si è visto con gli esempi precedenti). L´elemento <xsl:for-each> seleziona solo elementi relativi al nodo di contesto. Per ogni nodo "persona" viene chiesto, attraverso il codice, di stampare a video il nome:

<xsl:value-of select="@nome" />

Al rigo successivo vediamo ancora in azione <xsl:for-each> il quale "chiede" tutti i tipi di telefono:

<xsl:for-each select="telefono">

figlio di "persona" (elemento corrente). A questo punto si chiede di stampare in output il "tipo". Vediamo se è vero che otterremo un risultato del genere, visualizzando il risultato del documento XML.

N.B. L´elemento <xsl:for-each> non può trovarsi al di fuori di un modello e, quindi, non sostituisce il modello. Tra tutti gli elementi visti, solo <xsl:template> può essere usato come figlio diretto di <xsl:stylesheet>. Altra cosa importante: non si possono annidare i modelli.

© www.extrowebsite.com - Grafica, layout, articoli e guide sono di esclusiva proprietà del webmaster - Tutti i diritti riservati