Partager via


Comment : Qualifier des noms d'éléments et d'attributs XML

Exemple de code

Les espaces de noms XML contenus par des instances de la classe XmlSerializerNamespaces doivent se conformer à la spécification du World Wide Web Consortium (www.w3.org) intitulée "Namespaces in XML" (en anglais).

Les espaces de noms XML fournissent une méthode permettant de qualifier les noms d'éléments XML et d'attributs XML dans des documents XML. Un nom qualifié se compose d'un préfixe et d'un nom local séparés par une virgule. Le préfixe joue uniquement le rôle d'espace réservé ; il est mappé à un URI (Universal Resource Identifier) qui spécifie un espace de noms. L'association de l'espace de noms URI à gestion universelle avec le nom local génère un nom dont l'unicité universelle est garantie.

En créant une instance de XmlSerializerNamespaces et en ajoutant les paires d'espaces de noms à l'objet, vous pouvez spécifier les préfixes utilisés dans un document XML.

Pour créer des noms qualifiés dans un document XML

  1. Créez une instance de la classe XmlSerializerNamespaces.

  2. Ajoutez toutes les paires d'espaces de noms et de préfixes à XmlSerializerNamespaces.

  3. Appliquez l'attribut System.Xml.Serialization approprié à chaque membre ou classe que XmlSerializer doit sérialiser dans un document XML.

    Les attributs disponibles sont : XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute et XmlTypeAttribute.

  4. Attribuez une des valeurs d'espace de noms à la propriété Namespace de chaque attribut à partir de XmlSerializerNamespaces.

  5. Passez XmlSerializerNamespaces à la méthode Serialize de XmlSerializer.

Exemple

L'exemple suivant crée XmlSerializerNamespaces et ajoute deux paires d'espaces de noms et de préfixes à l'objet. Le code crée un XmlSerializer utilisé pour sérialiser une instance de la classe Books. Le code appelle la méthode Serialize à l'aide de XmlSerializerNamespaces, permettant au code XML de contenir des espaces de noms préfixés.

Option Explicit 
public class Price
{
    [XmlAttribute(Namespace = "http://www.cpandl.com")]
    public string currency;
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public decimal price;
}

Option Strict

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization

Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("XmlNamespaces.xml")
    End Sub 'Main
    
    Public Sub SerializeObject(filename As String)
        Dim mySerializer As New XmlSerializer(GetType(Books))
        ' Writing a file requires a TextWriter.
        Dim myWriter As New StreamWriter(filename)
        
        ' Creates an XmlSerializerNamespaces and adds two
        ' prefix-namespace pairs. 
        Dim myNamespaces As New XmlSerializerNamespaces()
        myNamespaces.Add("books", "http://www.cpandl.com")
        myNamespaces.Add("money", "http://www.cohowinery.com")
        
        ' Creates a Book.
        Dim myBook As New Book()
        myBook.TITLE = "A Book Title"
        Dim myPrice As New Price()
        myPrice.price = CDec(9.95)
        myPrice.currency = "US Dollar"
        myBook.PRICE = myPrice
        Dim myBooks As New Books()
        myBooks.Book = myBook
        mySerializer.Serialize(myWriter, myBooks, myNamespaces)
        myWriter.Close()
    End Sub
End Class

Public Class Books
    <XmlElement([Namespace] := "http://www.cohowinery.com")> _
    Public Book As Book
End Class 'Books

<XmlType([Namespace] := "http://www.cpandl.com")> _
Public Class Book

    <XmlElement([Namespace] := "http://www.cpandl.com")> _
    Public TITLE As String
    <XmlElement([Namespace] := "http://www.cohowinery.com")> _
    Public PRICE As Price
End Class

Public Class Price
    <XmlAttribute([Namespace] := "http://www.cpandl.com")> _
    Public currency As String
    Public <XmlElement([Namespace] := "http://www.cohowinery.com")> _
        price As Decimal
End Class
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
    
public class Run
{
    public static void Main()
    {
        Run test = new Run();
        test.SerializeObject("XmlNamespaces.xml");
    }
    public void SerializeObject(string filename)
    {
        XmlSerializer mySerializer = new XmlSerializer(typeof(Books));
        // Writing a file requires a TextWriter.
        TextWriter myWriter = new StreamWriter(filename);

        // Creates an XmlSerializerNamespaces and adds two
        // prefix-namespace pairs.
        XmlSerializerNamespaces myNamespaces = 
        new XmlSerializerNamespaces();
        myNamespaces.Add("books", "http://www.cpandl.com");
        myNamespaces.Add("money", "http://www.cohowinery.com");

        // Creates a Book.
        Book myBook = new Book();
        myBook.TITLE = "A Book Title";
        Price myPrice = new Price();
        myPrice.price = (decimal) 9.95;
        myPrice.currency = "US Dollar";
        myBook.PRICE = myPrice;
        Books myBooks = new Books();
        myBooks.Book = myBook;
        mySerializer.Serialize(myWriter,myBooks,myNamespaces);
        myWriter.Close();
    }
}

public class Books
{
    [XmlElement(Namespace = "http://www.cohowinery.com")]
    public Book Book;
}

[XmlType(Namespace ="http://www.cpandl.com")]
public class Book
{
    [XmlElement(Namespace = "http://www.cpandl.com")]
    public string TITLE;
    [XmlElement(Namespace ="http://www.cohowinery.com")]
    public Price PRICE;
}

Voir aussi

Tâches

Comment : Spécifier un autre nom d'élément pour un flux XML
Comment : Sérialiser un objet
Comment : Désérialiser un objet

Référence

XmlSerializer, classe
XmlSerializerNamespaces, classe

Concepts

L'outil XML Schema Definition et la sérialisation XML
Introduction à la sérialisation XML
Attributs qui contrôlent la sérialisation XML