Utilizzo degli spazi dei nomi XML
Gli spazi dei nomi XML contenuti dalle istanze della classe XmlSerializerNamespaces devono essere conformi alla specifica del World Wide Web Consortium (www.w3.org) denominata "Namespaces in XML" (informazioni in lingua inglese).
Gli spazi dei nomi XML offrono un metodo per qualificare i nomi di elementi e attributi XML in documenti XML. Un nome completo è composto da un prefisso e da un nome locale, separati dal carattere di due punti. Il prefisso funge soltanto da segnaposto ed è associato a un URI che specifica uno spazio dei nomi. La combinazione dello spazio dei nomi URI gestito a livello universale e del nome locale genera un nome univoco.
Creando un'istanza di XmlSerializerNamespaces e aggiungendo le coppie di spazi dei nomi all'oggetto, è possibile specificare i prefissi utilizzati in un documento XML.
Per creare nomi completi in un documento XML
Creare un'istanza della classe XmlSerializerNamespaces.
Aggiungere tutte le coppie di prefissi e spazi dei nomi all'XmlSerializerNamespaces.
Applicare l'attributo appropriato System.Xml.Serialization a ciascun membro o classe che XmlSerializer deve serializzare in un documento XML.
Gli attributi disponibili sono: XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute e XmlTypeAttribute.
Impostare la proprietà Namespace di ciascun attributo su uno dei valori dello spazio dei nomi tratto da XmlSerializerNamespaces.
Passare XmlSerializerNamespaces al metodo Serialize di XmlSerializer.
Nell'esempio che segue viene creato un XmlSerializerNamespaces e vengono aggiunte due coppie di prefisso e spazio dei nomi all'oggetto. Il codice crea un XmlSerializer utilizzato per serializzare un'istanza della classe Books
e chiama il metodo Serialize con XmlSerializerNamespaces, consentendo al linguaggio XML di contenere spazi dei nomi con prefissi.
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;
}
Vedere anche
Strumento di definizione di schemi XML (Xsd.exe) | Introduzione alla serializzazione XML | Classe XmlSerializer | Attributi che controllano la serializzazione XML | Classe XmlSerializerNamespaces | Override della serializzazione XML