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: Generare dinamicamente documenti ordinati

Come ormai probabilmente sapete, LINQ offre una clausola chiamata Order By, che permette di ordinare il risultato di una query a seconda dell'oggetto specificato. Con pochi passaggi è possibile leggere un documento Xml, ordinarlo e riscriverlo secondo l'ordinamento desiderato, sfruttando le embedded expression.

Dato, ad esempio, un file che è la rappresentazione Xml della tabella Categories del database Northwind, decidiamo di ordinarlo in base alla descrizione della categoria. Questo il contenuto del file:

<?xml version="1.0" encoding="utf-8"?>

<Categories>

  <Category CategoryID="1" CategoryName="Beverages" Description="Soft drinks, coffees, teas, beers, and 

            ales"></Category>

  <Category CategoryID="2" CategoryName="Condiments" Description="Sweet and savory sauces, relishes, spreads, and

            seasonings"></Category>

  <Category CategoryID="3" CategoryName="Confections" Description="Desserts, candies, and sweet breads"></Category>

  <Category CategoryID="4" CategoryName="Dairy Products" Description="Cheeses"></Category>

  <Category CategoryID="5" CategoryName="Grains/Cereals" Description="Breads, crackers, pasta, and cereal"></Category>

  <Category CategoryID="6" CategoryName="Meat/Poultry" Description="Prepared meats"></Category>

  <Category CategoryID="7" CategoryName="Produce" Description="Dried fruit and bean curd"></Category>

  <Category CategoryID="8" CategoryName="Seafood" Description="Seaweed and fish"></Category>

</Categories>

Da codice Visual Basic 2008, innanzitutto leggiamo il contenuto del documento:

Dim doc As XDocument = _

XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "Categories.xml")

Quindi lo interroghiamo, sfruttando l'oggetto Descendants (...<Category>) e specificando l'attributo (@Description) in base al quale vogliamo eseguire l'ordinamento:

Dim queryOrdinata = From category In doc...<Category> _

                    Order By category.@Description _

                    Select category

Nello snippet di cui sopra stiamo aggiungendo a una collection di oggetti XElement (queryOrdinata) il contenuto di tutti gli elementi Xml (le categorie) ma potevamo selezionarne anche solo alcuni. Se ora volessimo creare un nuovo documento Xml "from scratch" così ordinato, ci basta utilizzare un'espressione incorporata come la seguente:

'Il compilatore inferisce il tipo XDocument

Dim risultatoOrdinato = <?xml version="1.0"?>

                        <Categories>

                           <%= queryOrdinata %>

                        </Categories>

Il nuovo documento Xml, di cui potete osservare il risultato a video, è quindi così organizzato:

<Categories>

  <Category CategoryID="5" CategoryName="Grains/Cereals" Description="Breads, crackers, pasta, and cereal"></Category>

  <Category CategoryID="4" CategoryName="Dairy Products" Description="Cheeses"></Category>

  <Category CategoryID="3" CategoryName="Confections" Description="Desserts, candies, and sweet breads"></Category>

  <Category CategoryID="7" CategoryName="Produce" Description="Dried fruit and bean curd"></Category>

  <Category CategoryID="6" CategoryName="Meat/Poultry" Description="Prepared meats"></Category>

  <Category CategoryID="8" CategoryName="Seafood" Description="Seaweed and fish"></Category>

  <Category CategoryID="1" CategoryName="Beverages" Description="Soft drinks, coffees, teas, beers, and ales"></Category>

  <Category CategoryID="2" CategoryName="Condiments" Description="Sweet and savory sauces, relishes, spreads, and seasonings"></Category>

</Categories>

Alessandro

Print | posted on sabato 14 giugno 2008 14:48 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET