Procedura: qualificare i nomi degli elementi e degli attributi XML
Esempio di codice
Gli spazi dei nomi XML contenuti da 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 costituiscono 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 dai 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 a livello universale.
È possibile specificare i prefissi utilizzati in un documento XML creando un'istanza di XmlSerializerNamespaces e aggiungendo le coppie di spazi dei nomi all'oggetto.
Per creare nomi completi in un documento XML
Creare un'istanza della classe XmlSerializerNamespaces.
Aggiungere tutte le coppie di prefissi e spazi dei nomi a XmlSerializerNamespaces.
Applicare l'attributo System.Xml.Serialization appropriato a ogni 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 ogni attributo su uno dei valori dello spazio dei nomi di XmlSerializerNamespaces.
Passare XmlSerializerNamespaces al metodo Serialize di XmlSerializer.
Esempio
Nell'esempio seguente 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
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
Attività
Procedura: specificare un nome di elemento alternativo per un flusso XML
Procedura: serializzare un oggetto
Procedura: deserializzare un oggetto
Riferimenti
Classe XmlSerializer
Classe XmlSerializerNamespaces
Concetti
Strumento di definizione di schemi XML e serializzazione XML
Introduzione alla serializzazione XML
Attributi che controllano la serializzazione XML