Share via


Como qualificar elementos XML e nomes de atributos XML

Code Example

Os namespaces XML contidos por instâncias da classe XmlSerializerNamespaces devem estar em conformidade com a especificação do World Wide Web Consortium (www.w3.org) chamada "Namespaces em XML."

Os namespaces em XML fornecem um método para qualificar os nomes de elementos XML e atributos XML em documentos XML. Um nome qualificado é composto por um prefixo e por um nome local separados por dois-pontos. O prefixo funciona somente como espaço reservado; é mapeado para um URI que especifica um namespace. A combinação do namespace de URI gerenciado universalmente e o nome local produz um nome que é garantido para ser exclusivo universalmente.

Ao criar uma instância do XmlSerializerNamespaces e adicionar os pares de namespace ao objeto, você pode especificar os prefixos usados em um documento XML.

Para criar nomes qualificados em um documento XML

  1. Crie uma instância da classe XmlSerializerNamespaces.

  2. Adicione todos os prefixos e pares de namespace ao XmlSerializerNamespaces.

  3. Aplique o atributo System.Xml.Serialization apropriado a cada membro ou classe que o XmlSerializer deve serializar em um documento XML.

    Os atributos disponíveis são: XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute e XmlTypeAttribute.

  4. Configure a propriedade Namespace de cada atributo para um dos valores de namespace do XmlSerializerNamespaces.

  5. Passe o XmlSerializerNamespaces para o método Serialize do XmlSerializer.

Exemplo

O exemplo a seguir cria um XmlSerializerNamespaces e adiciona dois prefixos e pares de namespace ao objeto. O código cria um XmlSerializer que é usado para serializar uma instância da classe Books. O código chama o método Serialize com o XmlSerializerNamespaces, permitindo que o XML contenha namespaces com prefixo.

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;
}

Consulte também

Tarefas

Como especificar um nome de elemento alternativo para um fluxo XML

Como serializar um objeto

Como desserializar um objeto

Referência

XmlSerializer Class

XmlSerializerNamespaces Class

Conceitos

A ferramenta de definição de esquema XML e a serialização XML

Apresentando a serialização XML

Atributos que controlam a serialização XML