Utilizzare la classe XmlDataDocument per leggere un Feed RSS

di Lino Mari, in UserScript, ASP.NET, System.Xml,

Come già anticipato nel mio blog, vediamo un esempio per l'approccio alla lettura di feed RSS, per importarli sul proprio sito facendo uso della classe XmlDataDocument e di un DataTable.

L'esempio consiste di tre metodi che vengono richiamati in base a degli eventi e che riempiono un DataTable e un oggetto Cache per non richiamare il feed ad ogni richiesta.

E' necessario per prima cosa aggiungere questo codice al global.asax:

<%@ Import Namespace="System.Data" %>
<SCRIPT RUNAT="SERVER">

 'viene richiamata nel momento in cui la cache scade e
'quindi ricarica di nuovo l'oggetto chiamando la sub caricalmlog()
Sub Rimuovi(S As String, O As Object, C As CacheItemRemovedReason)
      caricalmlog()
End Sub

'viene richiamata ogn volta che riparte il web server
Sub application_start(Sender As Object, E As EventArgs)
      caricalmlog()
End sub

'questo è il metodo che esegue tutte le operazioni sul Feed RSS e su DataTable
Sub caricalmlog()
try

  Dim url as String = "http://dominio/feed.aspx" 'indirizzo del feed RSS

  Dim objTable As New DataTable("feed") 'oggetto DataTable

  'creo le colonne del DataTable
  Dim objColumn As DataColumn
    objcolumn = objTable.Columns.Add("title", System.Type.GetType("System.String"))
    objcolumn = objTable.Columns.Add("description", System.Type.GetType("System.String"))
  Dim objdr as datarow
      
  'istanza all'oggetto XmlDataDocument
  Dim xmldoc As New system.xml.XmlDataDocument
  'leggo tutto il documento XML partendo sall'indirizzo assegnato
  xmldoc.load(url)

  'istanza all'oggetto XmlNodeList e utilizzo del metodo GetElementsByTagname passandogli il nome dei nodi interessati
  Dim row As System.Xml.XmlNodeList = xmldoc.GetElementsByTagname("item")

  'istanza di XmlNode per navigare attraverso i nodi contenuti nell'oggetto XmlNodeList
  Dim objnode As System.Xml.XmlNode
          
  'ciclo per leggere tutti i nodi e i campi in esso contenuti
  for each objnode in row
    'apro una nuova riga
    objdr = objtable.newrow()
    'associo il nome del tag all'interno del nodo al campo nel DataTable
    objdr("title") = objnode("title").Innertext
    objdr("description") = objnode("description").Innertext
    'aggiungo la nuova riga
    objtable.rows.add(objdr)
  next
  
  Dim Remove as New CacheItemRemovedCallback(AddressOf Me.Rimuovi)

  HttpRuntime.Cache.Insert("feed",objtable,Nothing,DateTime.Now.AddHours(3), TimeSpan.Zero, CacheItemPriority.Normal, Remove)
  
  'distruggiamo gli oggetti
  xmldoc = nothing
  row = nothing
  objnode = nothing
 catch exc As Exception
  response.write(exc.tostring())
end try

End Sub
</SCRIPT>

Si dovrà poi creare una pagina come questa per testare il tutto:

<%@ Import Namespace="System.Data" %>
<SCRIPT RUNAT="SERVER">
Sub Page_Load()
  lmlog.DataSource = cache("feed").DefaultView
  lmlog.DataBind()
End Sub
</SCRIPT>
<asp:datalist id="lmlog" runat="server">
  <HeaderTemplate>
    <h1 style="color: #111;">Titolo</h1>
  </HeaderTemplate>
  <ItemTemplate>
    <div style="font-size: 16pt;font-style: bold; color: #F5730F;"><%# Container.DataItem("title")%></div>
    <div><%# Container.DataItem("description") %></div>
  </ItemTemplate>
</asp:datalist>

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