Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

LINQ-to-Xml: leggere feed RSS in Visual Basic, con l'inferenza di schemi

Poco tempo fa abbiamo parlato, in questo post, di come sia possibile leggere feed RSS tramite codice Visual Basic 2008, sfruttando il metodo Load della classe XDocument che, oltre a leggere documenti Xml, può recuperare da Internet contenuti nel medesimo formato.

Diverso tempo addietro, in quest'altro post, parlammo di un tool Microsoft chiamato Xml To Schema Inference Wizard, che aggiunge un modello di elemento a Visual Studio, in grado di generare schemi Xml a partire dai documenti Xml specificati. Grazie allo schema generato, viene abilitato il supporto di Intellisense anche nelle query LINQ-to-Xml che sfruttano la simbologia tipica di Visual Basic 2008, in particolare Descendants (...< >), Elements (.< >) e AttributeValue (.@).

Oggi uniamo il contenuto dei due post, per vedere come leggere feed RSS e scrivere una query LINQ che abbia il supporto di Intellisense. In primo luogo, dovete leggere i due post sopra citati! J

Questo perchè leggere i feed RSS è molto semplice con LINQ, ma non sempre si possono ricordare a memoria tutti gli elementi Xml che li costituiscono, quindi oggi vediamo come farlo aggiungendo il supporto di Intellisense.

Dopodichè, create un nuovo progetto per la Console e aggiungete un nuovo elemento di tipo Xml To Schema, chiamandolo, ad esempio, FeedSchema.xsd. Quando la finestra di Xml To Schema richiederà di specificare la sorgente Xml, utilizzate il pulsante Add From Web e, nella casella di testo che compare, specificate l'Uri da cui volete recuperare i feed, come ad esempio il seguente: http://community.visual-basic.it/alessandro/Rss.aspx che è l'indirizzo per i feed RSS di questo blog.

Dopo aver fatto clic su OK, Xml To Schema genera e aggiunge al progetto una serie di schemi in formato .Xsd che "mappano" la struttura Xml dei feed.

Attivando poi l'editor di codice, in primo luogo carichiamo in memoria i feed:

Dim doc As XDocument = XDocument.Load("http://community.visual-basic.it/alessandro/Rss.aspx")

Dopodichè, iniziamo con lo scrivere la query. Il codice è il seguente:

Dim query = From item In doc...<item> _

            Let DataPubblicazione = CDate(item.<pubDate>.Value).ToLocalTime _

            Let TitoloPost = item.<title>.Value _

            Let Categoria = item.<category>.Value _

            Order By DataPubblicazione Descending _

            Select New With {.Data = DataPubblicazione, .Titolo = TitoloPost, .Categoria = Categoria}

Infine, scriviamo una semplice iterazione per mostrare i risultati:

For Each feed In query

    Console.WriteLine("Data: {0}, Titolo post: {1}, Categoria: {2}", feed.Data, feed.Titolo, feed.Categoria)

Next

 

Console.ReadLine()

Durante la scrittura del codice, in particolare nell'aggiunta dei Descendants (...< >), avrete notato come, grazie ai namespace Xml mappati negli schemi, Intellisense mostri le alternative disponibili, come in qualunque altro tipo di situazione a cui siete abituati, sebbene con icone diverse, come in figura:

Di ulteriore interesse è il fatto che le informazioni selezionate (data di pubblicazione, titolo del post e categoria del post) confluiscono in tipi anonimi, assegnati a una collection che per inferenza è determinata come IEnumerable(Of anonymous types). Da ultimo, evidenziamo l'utilizzo della keyword Let che permette di assegnare un identificatore temporaneo alle informazioni su cui stiamo lavorando.

Se vi è utile, il codice è disponibile facendo clic qui sotto:

Alessandro

Print | posted on martedì 17 giugno 2008 21:28 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET