Creare un feed RSS con SQLXML

di Cristian Civera, in UserScript, ASP.NET, C#,

Per proseguire la settimana dedicata a SQLXML in questo script mostreremo come creare un feed RSS direttamente da SQL Server. Come nello script #608, la pagina ASP.NET ha solo la funzione di interrogare il database e scrivere in output l'XML:

Response.Clear();
Response.ContentType = "text/xml";
using (SqlConnection connection = new SqlConnection("server=(local);database=pubs;integrated security=sspi;"))
{
  connection.Open();
  SqlCommand command = new SqlCommand("ListTitlesForRss", connection);
  using (SqlDataReader reader = command.ExecuteReader())
  {
    while (reader.Read()) 
      Response.Write(reader.GetString(0)); 
  }
}

In questo caso ci appoggiamo ad una stored procedure di nome "ListTitlesForRss", poiché il codice TSQL è più laborioso. Un feed rss (http://blogs.aspitalia.com/rss.aspx) necessita di una struttura XML che non possiamo ottenere automaticamente da SQL Server perciò dovremo utilizzare la forma FOR XML EXCPLICIT che permette di specificare nodi, attributi, ecc.
Usare la forma esplicita vuol dire fornire un resultset che sfruttando l'ordine dei record e i nomi delle colonne darà indicazioni al motore di SAL Server su come preparare l'XML.
Due colonne vanno sempre messe nel resultset e sono Tag e Parent. Entrambe servono per indicare ainquale nodo dobbiamo inserire le informazioni del record corrente. La prima indica il numero di riferimento del Tag (il nodo) e la seconda indica qual è il numero di riferimento del Tag padre alla quale il nodo appartiene. Le colonne successive invece indicheranno in base all'alias il nome dell'elemento, il numero del Tag, il nome dell'attributo (opzionale) e una direttiva (opzionale) in questa forma:
nomeElemento!tag!nomeAttributo!direttiva
Quindi la seguente query:

SELECT 1 AS Tag,
         NULL AS Parent,
         'ciao' AS [item!1]
FOR XML EXPLICIT

Fornirà un solo record con 3 colonne: le due obbligatorie che indicano il numero di Tag, il parent, impostato a NULL perché è il nodo root e item!1 che indica come nome dell'elemento "item" e come tag di riferimento 1. In un'unica select abbiamo unito quella che è la dichiarazione della struttura tramite i nomi delle colonne e contenuto, tramite il valore "ciao". E' possibile separare le due cose con due query unite con la parola chiave UNION.
Il risultato di quella query sarà:

<item>ciao</item>

Non essendo un articolo su SQLXML non mi soffermo molto, ma potete trovare ampia documentazione su MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsql/ac_openxml_03xh.asp

E' certamente una tecnica lunga e non di facile comprensione, ma è molto potente.
Nell'esempio trovate il file SQL contenente la stored procedure da aggiungere al database pubs presente in ogni versione di SQL Server così da essere provato subito in unione al file rss.aspx.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi