Eseguire managed code con XSLT

3 pagine in totale: <<Indietro 1 2 [3]

Passare parametri dall'esterno

Proviamo a complicarci la vita, creando un esempio che prenda un parametro, nel caso specifico la data, in base alla selezione dell'utente:

Immagine

Come sempre partiamo dal foglio di stile, che conterrà questo codice:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:az="urn:az-object"
  version="1.0">
<xsl:param name="date"/>
<xsl:template match="/">
<span>Giorno di riferimento per la scadenza: <xsl:value-of select="$date" /></span>
<table border="1" cellspacing="0" cellpadding="1">
<tr>
  <th>Codice</th>
  <th>Descrizione</th>
  <th>Data inserimento</th>
  <th>Giorni giacenza</th>
</tr>
<xsl:for-each select="//articoli">
  <xsl:apply-templates select="articolo" />
</xsl:for-each>
</table>
</xsl:template>
 
<xsl:template match="articolo">
<tr>
  <td><xsl:value-of select="codice" /></td>
  <td><xsl:value-of select="descrizione" /></td>
  <td><xsl:value-of select="data_inserimento" /></td>
  <td><xsl:value-of select="az:CalcolaData(data_inserimento,$date)" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>

Abbiamo aggiunto una dichiarazione per un parametro di nome "date", che visualizzeremo nella pagina inserendo:

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

Quindi tale parametro viene passato alla funzione server-side in questo modo

<xsl:value-of select="az:CalcolaData(data_inserimento,$date)" />

Ed ecco quindi come diventa il codice della pagina:

private void Page_Load(object sender, System.EventArgs e)
{
  if (!Page.IsPostBack)
  {
   Calendar1.SelectedDate=DateTime.Now;
   InserisciDati(DateTime.Now);
  }
}
public void InserisciDati(DateTime data)
{
  XsltArgumentList args=new XsltArgumentList();
  args.AddParam("date",String.Empty,data.ToShortDateString());
  args.AddExtensionObject("urn:az-object",this);
  Xml1.TransformSource="esempio_4.xslt";
  Xml1.TransformArgumentList=args;
}
public string CalcolaData(string data,string data2)
{
  DateTime dt1,dt2;
  TimeSpan diff;
  dt1=DateTime.Parse(data2);
  dt2=DateTime.Parse(data);
  diff = dt1.Subtract(dt2);
  return diff.Days.ToString();
}

La funzione principale è ovviamente InserisciDati. Nell'istanza di classe XsltArgumentList viene aggiunto il parametro date in cui viene inserita la data da calcolare. Quindi è stata modificata la funzione "CalcolaData", a cui è stato aggiunto un parametro di input aggiuntivo, ovvero la data passata dal documento XSL.

Conclusioni

Se desiderate approfondire maggiormente gli esempi trattati in questo articolo, vi invito a scaricare l'esempio dal link che trovare alla fine di questo articolo.

Come si può notare l'unione di XML, XSLT e del .NET Framework consente di creare facilmente sistemi di trasformazione dei contenuti, potendo tra l'altro contare su strumenti di tutto rispetto.

Approfondimenti

3 pagine in totale: <<Indietro 1 2 [3]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC