Leer en inglés

Compartir a través de


Procedimiento para calificar elementos XML y nombres de atributo de XML

Los espacios de nombres XML contenidos por instancias de la clase XmlSerializerNamespaces deben cumplir con la especificación de World Wide Web Consortium (W3C) llamada Espacios de nombres en XML.

Los espacios de nombres XML proporcionan una método para calificar los nombres de elementos y atributos XML en documentos XML. Un nombre calificado se compone de un prefijo y un nombre local, separados por dos puntos. El prefijo funciona únicamente como marcador de posición y está asignado a un identificador URI que especifica un espacio de nombres. La combinación del espacio de nombres del URI, universalmente administrado, y el nombre local genera un nombre del que se garantiza que es universalmente único.

Creando una instancia de XmlSerializerNamespaces y agregando los pares de espacio de nombres al objeto, puede especificar los prefijos utilizados en un documento XML.

Para crear nombres calificados en un documento XML

  1. Cree una instancia de la clase XmlSerializerNamespaces.

  2. Agregue todos los prefijos y pares de espacio de nombres a XmlSerializerNamespaces.

  3. Aplique el atributo apropiado System.Xml.Serialization a cada método o clase que XmlSerializer vaya a serializar en un documento XML.

    Los atributos disponibles son: XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute, y XmlTypeAttribute.

  4. Establezca la propiedad Namespace de cada atributo en uno de los valores de espacio de nombres del XmlSerializerNamespaces.

  5. Pase XmlSerializerNamespaces al método Serialize de XmlSerializer.

Ejemplo

En el siguiente ejemplo, se crea un XmlSerializerNamespaces al que se agregan dos prefijos y pares de espacio de nombres al objeto. El código crea XmlSerializer que se utiliza para serializar una instancia de la clase Books. El código llama al método Serialize con XmlSerializerNamespaces, permitiéndole al XML contener los espacios de nombres prefijados.

using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

public class Program
{
    public static void Main()
    {
        SerializeObject("XmlNamespaces.xml");
    }

    public static void SerializeObject(string filename)
    {
        var 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.
        var myNamespaces = new XmlSerializerNamespaces();
        myNamespaces.Add("books", "http://www.cpandl.com");
        myNamespaces.Add("money", "http://www.cohowinery.com");

        // Creates a Book.
        var myBook = new Book();
        myBook.TITLE = "A Book Title";
        var myPrice = new Price();
        myPrice.price = (decimal) 9.95;
        myPrice.currency = "US Dollar";
        myBook.PRICE = myPrice;
        var 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;
}

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

Vea también