XML 요소 및 XML 특성 이름을 한정 하는 방법How to qualify XML element and XML attribute names

XmlSerializerNamespaces 클래스의 인스턴스에 포함 된 XML 네임 스페이스는 xml에서 네임 스페이스라는 W3C (World Wide Web 컨소시엄) 사양을 따라야 합니다.XML namespaces contained by instances of the XmlSerializerNamespaces class must conform to the World Wide Web Consortium (W3C) specification called Namespaces in XML.

XML 네임스페이스는 XML 문서에서 XML 요소 및 XML 특성의 이름을 정규화하는 메서드를 제공합니다.XML namespaces provide a method for qualifying the names of XML elements and XML attributes in XML documents. 정규화된 이름은 콜론으로 구분된 접두사와 로컬 이름으로 이루어집니다.A qualified name consists of a prefix and a local name, separated by a colon. 접두사는 자리 표시자로만 사용되며 네임스페이스를 지정하는 URI에 매핑됩니다.The prefix functions only as a placeholder; it is mapped to a URI that specifies a namespace. 보편적으로 관리되는 URI 네임스페이스와 로컬 이름을 조합하면 보편적으로 고유한 이름이 만들어집니다.The combination of the universally managed URI namespace and the local name produces a name that is guaranteed to be universally unique.

XmlSerializerNamespaces의 인스턴스를 만들고 네임스페이스 쌍을 개체에 추가하면 XML 문서에 사용되는 접두사를 지정할 수 있습니다.By creating an instance of XmlSerializerNamespaces and adding the namespace pairs to the object, you can specify the prefixes used in an XML document.

XML 문서에서 정규화된 이름을 만들려면To create qualified names in an XML document

  1. XmlSerializerNamespaces 클래스의 인스턴스를 만듭니다.Create an instance of the XmlSerializerNamespaces class.

  2. 모든 접두사와 네임스페이스 쌍을 XmlSerializerNamespaces에 추가합니다.Add all prefixes and namespace pairs to the XmlSerializerNamespaces.

  3. 적절한 System.Xml.Serialization 특성을 XmlSerializer가 XML 문서로 serialize할 각 멤버나 클래스에 적용합니다.Apply the appropriate System.Xml.Serialization attribute to each member or class that the XmlSerializer is to serialize into an XML document.

    사용할 수 있는 특성은 XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttributeXmlTypeAttribute입니다.The available attributes are: XmlAnyElementAttribute, XmlArrayAttribute, XmlArrayItemAttribute, XmlAttributeAttribute, XmlElementAttribute, XmlRootAttribute, and XmlTypeAttribute.

  4. 각 특성의 Namespace 속성을 XmlSerializerNamespaces의 네임스페이스 값 중 하나로 설정합니다.Set the Namespace property of each attribute to one of the namespace values from the XmlSerializerNamespaces.

  5. XmlSerializerSerialize 메서드에 XmlSerializerNamespaces를 전달 합니다.Pass the XmlSerializerNamespaces to the Serialize method of the XmlSerializer.

예제Example

다음 예제에서는 XmlSerializerNamespaces를 만들고 두 개의 접두사와 네임스페이스 쌍을 개체에 추가합니다.The following example creates an XmlSerializerNamespaces, and adds two prefix and namespace pairs to the object. 코드에서는 XmlSerializer 클래스의 인스턴스를 serialize하는 데 사용되는 Books를 만듭니다.The code creates an XmlSerializer that is used to serialize an instance of the Books class. 코드는 Serialize를 사용하여 XmlSerializerNamespaces 메서드를 호출하여 XML이 접두사가 지정된 네임스페이스를 포함할 수 있게 됩니다.The code calls the Serialize method with the XmlSerializerNamespaces, allowing the XML to contain prefixed namespaces.

Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization

Public Module Program

    Public Sub Main()
        SerializeObject("XmlNamespaces.xml")
    End Sub

    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 Module

Public Class Books
    <XmlElement([Namespace] := "http://www.cohowinery.com")> _
    Public Book As Book
End Class

<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
    <XmlElement([Namespace] := "http://www.cohowinery.com")> _
    Public price As Decimal
End Class
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;
}

참고 항목See also