Condividi tramite


Cenni preliminari su LINQ to XML

XML è stato ampiamente adottato per la formattazione dei dati in una vasta gamma di contesti. Viene ad esempio utilizzato in applicazioni Web, file di configurazione, file di Microsoft Office Word e in database.

LINQ to XML costituisce un approccio aggiornato e ridisegnato alla programmazione con XML. Fornisce funzionalità di modifica dei documenti in memoria di Document Object Model (DOM) e supporta espressioni di query LINQ. Sebbene sintatticamente diverse da XPath, queste espressioni di query offrono funzionalità simili.

Sviluppatori LINQ to XML

LINQ to XML è destinato a diversi tipi di sviluppatori. Per un sviluppatore medio che desidera solo poter eseguire una determinata operazione, LINQ to XML semplifica il codice XML e consente di eseguire query in modo simile a SQL. Sono poi sufficienti competenze minime per consentire a un programmatore di imparare a scrivere query potenti e meno estese nel linguaggio di programmazione desiderato.

Gli sviluppatori professionisti possono utilizzare LINQ to XML per incrementare notevolmente la propria produttività. LINQ to XML consente di scrivere una minor quantità di codice, che tuttavia risulta più espressivo, compatto e potente. È inoltre possibile utilizzare espressioni di query da più domini di dati contemporaneamente.

Informazioni su LINQ to XML

LINQ to XML è un'interfaccia di programmazione XML in memoria con supporto LINQ che consente di utilizzare codice XML dall'interno dei linguaggi di programmazione di .NET Framework.

LINQ to XML è simile al modello DOM (Document Object Model) in quanto porta in memoria il documento XML. È quindi possibile eseguire query e modificare il documento e dopo averlo modificato salvarlo in un file o serializzarlo e inviarlo tramite Internet. LINQ to XML è tuttavia diverso da DOM. Fornisce infatti un nuovo modello a oggetti, più leggero e facile da utilizzare, che sfrutta i miglioramenti apportati al linguaggio in Visual C# 2008.

Il principale vantaggio di LINQ to XML è costituito dall'integrazione con LINQ (Language-Integrated Query). Grazie a tale integrazione è possibile scrivere query sul documento XML in memoria per recuperare raccolte di elementi e di attributi. La funzionalità di query di LINQ to XML è paragonabile a XPath e XQuery, dal punto di vista funzionale ma non sintattico. L'integrazione di LINQ in Visual C# 2008 offre una tipizzazione più forte, il controllo in fase di compilazione e il supporto migliorato del debugger.

Un ulteriore vantaggio di LINQ to XML, costituito dalla possibilità di utilizzare risultati di query come parametri di costruttori di oggetti XElement e XAttribute, consente di disporre di un approccio potente per la creazione di strutture ad albero XML. Con tale approccio, definito costruzione funzionale, gli sviluppatori possono trasformare facilmente strutture ad albero XML da una forma a un'altra.

Ad esempio, si supponga di avere un tipico ordine di acquisto in formato XML come descritto in File XML di esempio: Typical Purchase Order (LINQ to XML). Utilizzando LINQ to XML, è possibile eseguire la query seguente per ottenere il valore dell'attributo relativo al numero di parte di ciascun articolo incluso dell'ordine di acquisto:

IEnumerable<string> partNos =
    from item in purchaseOrder.Descendants("Item")
    select (string) item.Attribute("PartNumber");

In Visual Basic è possibile scrivere la stessa query nel modo seguente:

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

Si supponga ancora, ad esempio, di voler creare un elenco, ordinato in base al numero di parte, degli articoli il cui valore è maggiore di 100 dollari. Per ottenere queste informazioni, è possibile eseguire la query seguente:

IEnumerable<XElement> partNos =
    from item in purchaseOrder.Descendants("Item")
    where (int) item.Element("Quantity") *
        (decimal) item.Element("USPrice") > 100
    orderby (string)item.Element("PartNumber")
    select item;

In Visual Basic è possibile scrivere la stessa query nel modo seguente:

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Where (item.<Quantity>.Value * _
           item.<USPrice>.Value) > 100 _
    Order By item.<PartNumber>.Value _
    Select item

Oltre alle funzionalità LINQ, LINQ to XML include un'interfaccia di programmazione XML migliorata. Utilizzando LINQ to XML è possibile:

  • Caricare codice XML da file o flussi.

  • Serializzare codice XML in file o flussi.

  • Creare codice XML nuovo utilizzando la costruzione funzionale.

  • Eseguire una query su codice XML utilizzando assi simili a XPath.

  • Modificare la struttura ad albero XML in memoria utilizzando metodi quali esempio Add, Remove, ReplaceWithe SetValue.

  • Convalidare strutture ad albero XML utilizzando lo schema XSD.

  • Utilizzare una combinazione di queste funzionalità per trasformare strutture ad albero XML da una forma in un altra.

Creazione di strutture ad albero XML

Uno dei vantaggi più significativi della programmazione con LINQ to XML è rappresentato dalla facilità con cui è possibile creare strutture ad albero XML. Ad esempio, per creare una piccola struttura ad albero XML, è possibile scrivere il codice C# seguente:

XElement contacts =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144", 
                new XAttribute("Type", "Home")),
            new XElement("phone", "425-555-0145",
                new XAttribute("Type", "Work")),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );

In Visual Basic il codice per costruire la struttura ad albero XML è ancora più semplice, in quanto prevede l'utilizzo di valori letterali XML:

Dim contacts = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone Type="Home">206-555-0144</Phone>
            <Phone Type="Work">425-555-0145</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Il compilatore Visual Basic converte i valori letterali XML in chiamate al metodo LINQ to XML.

Per ulteriori informazioni, vedere Creazione di strutture ad albero XML.

Vedere anche

Riferimenti

System.Xml.Linq

Concetti

Overview of LINQ to XML in Visual Basic

Altre risorse

Guida introduttiva (LINQ to XML)

XML in Visual Basic