Vue d’ensemble de LINQ to XML

LINQ to XML fournit une interface de programmation XML en mémoire qui exploite le framework LINQ (Language-Integrated Query) de .NET. LINQ to XML utilise les capacités .NET et s’apparente à une interface de programmation XML DOM (Document Object Model) améliorée et mise à jour.

Le langage XML a été largement adopté comme méthode pour mettre en forme des données dans de nombreux contextes. Par exemple, on trouve du code XML sur le Web, dans les fichiers de configuration, dans les fichiers Microsoft Office Word et dans les bases de données.

LINQ to XML est une approche à jour et repensée de la programmation avec XML. Elle propose les fonctions de modification des documents en mémoire du DOM (Document Objet Model) et prend en charge les expressions de requête LINQ. Bien que ces expressions de requête soient syntaxiquement différentes de XPath, elles procurent la même fonctionnalité.

Développeurs LINQ to XML

LINQ to XML cible un large éventail de développeurs. Pour un développeur qui souhaite simplement se faciliter la tâche, LINQ to XML rend le XML plus abordable en fournissant une expérience de requête semblable à SQL. Un rapide apprentissage permettra aux programmeurs d'écrire des requêtes succinctes et puissantes dans le langage de programmation de leur choix.

Les développeurs professionnels peuvent utiliser LINQ to XML pour accroître considérablement leur productivité. Avec LINQ to XML, ils peuvent écrire moins de code, et ce dernier est donc est plus expressif, plus compact et plus puissant. Ils peuvent utiliser simultanément des expressions de requête de plusieurs domaines de données.

LINQ to XML est une interface de programmation XML

LINQ to XML est une interface de programmation XML prenant en charge LINQ qui vous permet de travailler avec du code XML dans les langages de programmation .NET.

LINQ to XML s’apparente au modèle DOM en ce sens qu’il place le document XML en mémoire. Vous pouvez interroger et modifier le document, et après l'avoir modifié, vous pouvez l'enregistrer dans un fichier ou le sérialiser et l'envoyer via Internet. Toutefois, LINQ to XML diffère du DOM :

  • Il fournit un nouveau modèle objet qui est plus léger et plus facile à utiliser.
  • Il tire parti des fonctionnalités de langage en C# et Visual Basic.

L’avantage le plus important de LINQ to XML est son intégration à LINQ (Language-Integrated Query). Cette intégration vous permet d'écrire des requêtes sur le document XML en mémoire afin de récupérer des collections d'éléments et d'attributs. La capacité de requête de LINQ to XML est comparable en termes de fonctionnalités (mais pas en termes de syntaxe) à XQuery et XPath. L’intégration de LINQ dans C# et Visual Basic fournit un typage plus fort, la vérification au moment de la compilation et une prise en charge améliorée du débogueur.

LINQ to XML présente également l’avantage de pouvoir utiliser des résultats de requête en tant que paramètres de constructeurs d’objets XElement et XAttribute, ce qui constitue une approche puissante pour la création d’arborescences XML. Cette approche, appelée construction fonctionnelle, permet aux développeurs de transformer facilement des arborescences XML d’une forme en une autre.

Par exemple, vous pouvez avoir un bon de commande XML classique comme décrit dans Exemple de fichier XML : commande fournisseur typique. En utilisant LINQ to XML, vous pourriez exécuter la requête suivante afin d’obtenir la valeur d’attribut de numéro de référence pour chaque élément de la commande fournisseur :

// 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

Dans C#, vous pouvez réécrire ceci sous forme d’une syntaxe de méthode :

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

Vous pourriez également, si vous le souhaitez, générer une liste des éléments avec une valeur supérieure à $ 100, triés par numéro de référence. Pour obtenir ces informations, vous pourriez exécuter la requête suivante :

// 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

Dans C#, vous pouvez aussi réécrire ceci sous forme d’une syntaxe de méthode :

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

En plus de ces fonctionnalités LINQ, LINQ to XML fournit une interface de programmation XML améliorée. À l’aide de LINQ to XML, vous pouvez :

  • charger du code XML à partir de fichiers ou de flux ;
  • sérialiser du code XML vers des fichiers ou des flux ;
  • créer du code XML à partir de zéro à l'aide de la construction fonctionnelle ;
  • interroger du code XML à l’aide d’axes de type XPath ;
  • manipuler l'arborescence XML en mémoire à l'aide de méthodes telles que Add, Remove, ReplaceWith et SetValue ;
  • valider des arborescences XML à l'aide de XSD ;
  • utiliser une combinaison de ces fonctionnalités pour transformer des arborescences XML d'une forme à une autre.

Créer des arborescences XML

Un des principaux avantages liés à la programmation avec LINQ to XML tient à la facilité de création d’arborescences XML. Par exemple, pour créer une petite arborescence XML, vous pouvez écrire du code comme suit :

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>

Notes

La version Visual Basic de l’exemple utilise des littéraux XML. Vous pouvez également utiliser XElement en Visual Basic, comme dans la version C#.

Pour plus d’informations, consultez Arborescence XML.

Voir aussi