Panoramica di LINQ to XMLLINQ to XML overview

LINQ to XML offre un'interfaccia di programmazione XML in memoria che usa .NET Language-Integrated Query (LINQ) Framework.LINQ to XML provides an in-memory XML programming interface that leverages the .NET Language-Integrated Query (LINQ) Framework. LINQ to XML usa le funzionalità .NET e può essere paragonato a un'interfaccia di programmazione XML DOM aggiornata e riprogettata.LINQ to XML uses .NET capabilities and is comparable to an updated, redesigned Document Object Model (DOM) XML programming interface.

XML è stato ampiamente adottato per la formattazione dei dati in una vasta gamma di contesti.XML has been widely adopted as a way to format data in many contexts. Viene ad esempio usato in applicazioni Web, file di configurazione, file di Microsoft Office Word e in database.For example, you can find XML on the Web, in configuration files, in Microsoft Office Word files, and in databases.

LINQ to XML è un approccio aggiornato e riprogettato per la programmazione con XML.LINQ to XML is an up-to-date, redesigned approach to programming with XML. Fornisce le funzionalità di modifica dei documenti in memoria del Document Object Model (DOM) e supporta le espressioni di query LINQ.It provides the in-memory document modification capabilities of the Document Object Model (DOM), and supports LINQ query expressions. Sebbene sintatticamente diverse da XPath, queste espressioni di query offrono funzionalità simili.Although these query expressions are syntactically different from XPath, they provide similar functionality.

Sviluppatori LINQ to XMLLINQ to XML developers

LINQ to XML è destinato a un'ampia gamma di sviluppatori.LINQ to XML targets a variety of developers. Per uno sviluppatore medio che desidera solo ottenere un risultato, LINQ to XML rende il codice XML più semplice fornendo un'esperienza di query simile a SQL.For an average developer who just wants to get something done, LINQ to XML makes XML easier by providing a query experience that's similar to 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.With just a bit of study, programmers can learn to write succinct and powerful queries in their programming language of choice.

Gli sviluppatori professionisti possono utilizzare LINQ to XML per aumentare significativamente la loro produttività.Professional developers can use LINQ to XML to greatly increase their productivity. Con LINQ to XML, possono scrivere meno codice più espressivo, compatto e più potente.With LINQ to XML, they can write less code that's more expressive, more compact, and more powerful. È inoltre possibile usare espressioni di query da più domini di dati contemporaneamente.They can use query expressions from multiple data domains at the same time.

LINQ to XML è un'interfaccia di programmazione XMLLINQ to XML is an XML programming interface

LINQ to XML è un'interfaccia di programmazione XML in memoria, abilitata per LINQ, che consente di utilizzare XML dall'interno dei linguaggi di programmazione .NET.LINQ to XML is a LINQ-enabled, in-memory XML programming interface that enables you to work with XML from within the .NET programming languages.

LINQ to XML è simile al Document Object Model (DOM) in quanto riporta il documento XML in memoria.LINQ to XML is like the Document Object Model (DOM) in that it brings the XML document into memory. È quindi possibile eseguire query e modificare il documento e dopo averlo modificato salvarlo in un file o serializzarlo e inviarlo tramite Internet.You can query and modify the document, and after you modify it you can save it to a file or serialize it and send it over the Internet. Tuttavia, LINQ to XML differisce da DOM:However, LINQ to XML differs from DOM:

  • Fornisce un nuovo modello a oggetti più leggero e più semplice da usare.It provides a new object model that's lighter weight and easier to work with.
  • Sfrutta i vantaggi delle funzionalità del linguaggio in C# e Visual Basic.It takes advantage of language features in C# and Visual Basic.

Il vantaggio più importante della LINQ to XML è l'integrazione con LINQ (Language-Integrated Query).The most important advantage of LINQ to XML is its integration with Language-Integrated Query (LINQ). Grazie a tale integrazione è possibile scrivere query sul documento XML in memoria per recuperare raccolte di elementi e di attributi.This integration enables you to write queries on the in-memory XML document to retrieve collections of elements and attributes. La funzionalità di query di LINQ to XML è paragonabile nelle funzionalità (sebbene non nella sintassi) a XPath e XQuery.The query capability of LINQ to XML is comparable in functionality (although not in syntax) to XPath and XQuery. L'integrazione di LINQ in C# e Visual Basic offre una tipizzazione più forte, il controllo in fase di compilazione e il supporto migliorato del debugger.The integration of LINQ in C# and Visual Basic provides stronger typing, compile-time checking, and improved debugger support.

Un altro vantaggio di LINQ to XML è la possibilità di usare i risultati delle query come parametri dei XElement XAttribute costruttori di oggetti e consente un approccio efficace alla creazione di alberi XML.Another advantage of LINQ to XML is the ability to use query results as parameters to XElement and XAttribute object constructors enables a powerful approach to creating XML trees. Questo approccio, chiamato costruzione funzionale consente agli sviluppatori di trasformare facilmente gli alberi XML da una forma all'altra.This approach, called functional construction, enables developers to easily transform XML trees from one shape to another.

Ad esempio, è possibile che si disponga di un tipico ordine di acquisto XML, come descritto in file XML di esempio: tipico ordine di acquisto.For example, you might have a typical XML purchase order as described in Sample XML file: Typical purchase order. Utilizzando LINQ to XML, è possibile eseguire la query seguente per ottenere il valore dell'attributo del numero di parte per ogni elemento Item nell'ordine di acquisto:By using LINQ to XML, you could run the following query to obtain the part number attribute value for every item element in the purchase order:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

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

In C# questo può essere riscritto nel formato di sintassi del metodo:In C# this can be rewritten in method syntax form:

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("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.As another example, you might want a list, sorted by part number, of the items with a value greater than $100. Per ottenere queste informazioni, è possibile eseguire la query seguente:To obtain this information, you could run the following query:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

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

Anche in questo caso, in C# questo può essere riscritto nel formato di sintassi del metodo:Again, in C# this can be rewritten in method syntax form:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

Oltre a queste funzionalità LINQ, LINQ to XML fornisce un'interfaccia di programmazione XML migliorata.In addition to these LINQ capabilities, LINQ to XML provides an improved XML programming interface. Con LINQ to XML è possibile:Using LINQ to XML, you can:

  • Caricare XML da file o flussi.Load XML from files or streams.
  • Serializzare codice XML in file o flussi.Serialize XML to files or streams.
  • Creare codice XML nuovo usando la costruzione funzionale.Create XML from scratch by using functional construction.
  • Eseguire una query su codice XML usando assi simili a XPath.Query XML using XPath-like axes.
  • Modificare l'albero XML in memoria usando metodi quali esempio Add, Remove, ReplaceWithe SetValue.Manipulate the in-memory XML tree by using methods such as Add, Remove, ReplaceWith, and SetValue.
  • Convalidare alberi XML usando lo schema XSD.Validate XML trees using XSD.
  • Usare una combinazione di queste funzionalità per trasformare strutture ad albero XML da una forma in un altra.Use a combination of these features to transform XML trees from one shape into another.

Creazione di strutture ad albero XMLCreate XML trees

Uno dei vantaggi più significativi della programmazione con LINQ to XML è che è facile creare alberi XML.One of the most significant advantages of programming with LINQ to XML is that it's easy to create XML trees. Ad esempio, per creare un piccolo albero XML, è possibile scrivere il codice seguente:For example, to create a small XML tree, you can write code as follows:

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")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Nota

La versione Visual Basic dell'esempio usa i valori letterali XML.The Visual Basic version of the example uses XML literals. È anche possibile usare XElement in Visual Basic, come nella versione C#.You can also use XElement in Visual Basic, as in the C# version.

Per altre informazioni, vedere strutture ad albero XML.For more information, see XML trees.

Vedere ancheSee also