Utilisation d'espaces de noms XML
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 deux points. 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 ensembles d'espace 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
Créez une instance de la classe XmlSerializerNamespaces.
Ajoutez tous les ensembles de préfixes et d'espaces de noms à XmlSerializerNamespaces.
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.
Attribuez une des valeurs d'espace de noms à la propriété Namespace de chaque attribut à partir de XmlSerializerNamespaces.
Passez XmlSerializerNamespaces à la méthode Serialize de XmlSerializer.
L'exemple suivant crée un XmlSerializerNamespaces, et ajoute deux ensembles d'espaces de noms et de préfixes à l'objet. Le code crée un XmlSerializer qui est 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
[C#]
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
Outil XML Schema Definition Tool | Introduction à la sérialisation XML | XmlSerializer, classe | Attributs qui contrôlent la sérialisation XML | XmlSerializerNamespaces, classe | Substitution de la sérialisation XML