Guide pratique pour contrôler les préfixes d’espace de noms (LINQ to XML)

Cet article explique comment contrôler les préfixes d’espace de noms lors de la sérialisation d’une arborescence XML en C# et Visual Basic.

Dans de nombreux cas, il n'est pas nécessaire de contrôler les préfixes d'espaces de noms. Toutefois, certains outils de programmation XML le nécessitent. Par exemple, vous pouvez manipuler une feuille de style XSLT ou un document XAML qui contient des expressions XPath incorporées qui font référence à des préfixes d’espace de noms spécifiques. Dans ce cas, il est important que le document soit sérialisé avec ces préfixes. Il s'agit d’une raison courante de contrôle des préfixes d'espaces de noms.

Une autre raison est que vous souhaitez que les utilisateurs modifient manuellement le document XML et que vous souhaitez créer des préfixes d’espace de noms qui sont pratiques pour que l’utilisateur tape. Par exemple, vous pourriez générer un document XSD. Les conventions applicables aux schémas suggèrent que vous utilisiez xs ou xsd comme préfixe de l'espace de noms de schéma.

Pour contrôler les préfixes d'espaces de noms, vous devez insérer des attributs qui déclarent des espaces de noms. Si vous déclarez les espaces de noms avec des préfixes spécifiques, LINQ to XML tentera d'honorer les préfixes d'espaces de noms lors de la sérialisation.

Pour créer un attribut qui déclare un espace de noms avec un préfixe, vous devez créer un attribut où l'espace de noms du nom de l'attribut est Xmlns et le nom de l'attribut est le préfixe d'espace de noms. La valeur de l'attribut est l'URI de l'espace de noms.

Exemple : créer deux espaces de noms qui ont des préfixes

Cet exemple déclare deux espaces de noms. Il spécifie le préfixe aw de l’espace de noms http://www.adventure-works.com et le préfixe fc de l’espace de noms www.fourthcoffee.com.

XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
Imports <xmlns:aw="http://www.adventure-works.com">
Imports <xmlns:fc="www.fourthcoffee.com">

Module Module1

    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <fc:Child>
                    <aw:DifferentChild>other content</aw:DifferentChild>
                </fc:Child>
                <aw:Child2>c2 content</aw:Child2>
                <fc:Child3>c3 content</fc:Child3>
            </aw:Root>
        Console.WriteLine(root)
    End Sub

This example produces the following output:

```xml
<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

Voir aussi