다음을 통해 공유


System.Xml.Linq.XNamespace 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

이 클래스는 네임스페이스의 XML 구문을 나타냅니다.

모든 XName 항목에는 .가 XNamespace포함됩니다. 요소가 네임스페이스에 없더라도 요소에는 XName 여전히 네임스페이스가 XNamespace.None포함됩니다. 이 XName.Namespace 속성은 .이(가 null) 아닙니다.

XNamespace 개체 만들기

개체를 만드는 XNamespace 가장 일반적인 방법은 단순히 문자열을 할당하는 것입니다. 그런 다음 더하기 연산자의 재정의를 사용하여 네임스페이스를 로컬 이름과 결합할 수 있습니다. 다음 예제에서는 이 관용구를 보여줍니다.

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)

그러나 Visual Basic에서는 일반적으로 다음과 같이 전역 기본 네임스페이스를 선언합니다.

Imports <xmlns='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>Content</Root>
        Console.WriteLine(root)
    End Sub
End Module

이 예제는 다음과 같은 출력을 생성합니다.

<Root xmlns="http://www.adventure-works.com">Content</Root>

문자열을 할당하면 XNamespace .에서 String암시적 변환이 사용됩니다.

자세한 내용과 예제는 C#에서 네임스페이스가 있는 문서를 만드는 방법(LINQ to XML)을 참조하세요.

Visual Basic에서 네임스페이스를 사용하는 방법에 대한 자세한 내용은 XML 네임스페이스 작업을 참조하세요.

컨트롤 네임스페이스 접두사

네임스페이스를 선언하는 특성을 만드는 경우 특성에 지정된 접두사는 serialize된 XML에 유지됩니다. 접두사가 포함된 네임스페이스를 선언하는 특성을 만들려면 특성 이름의 네임스페이스가 Xmlns이고 특성의 이름이 네임스페이스 접두사인 특성을 만듭니다. 특성 값은 네임스페이스의 URI입니다. 다음 예제에서는 이 관용구를 보여줍니다.

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
    New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
    "Content")
Console.WriteLine(root)

Visual Basic에서는 네임스페이스 접두사를 제어하는 네임스페이스 노드를 만드는 대신 일반적으로 전역 네임스페이스 선언을 사용합니다.

Imports <xmlns:aw='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>Content</aw:Root>
        Console.WriteLine(root)
    End Sub
End Module

이 예제는 다음과 같은 출력을 생성합니다.

<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>

자세한 내용은 네임스페이스 접두사를 제어하는 방법을 참조 하세요.

기본 네임스페이스 만들기

네임스페이스가 될 특성을 생성할 때 특성 이름에 특수 값이 "xmlns"인 경우 XML 트리가 serialize되면 네임스페이스가 기본 네임스페이스로 선언됩니다. 이름이 "xmlns"인 특수 특성은 네임스페이스에 없습니다. 특성 값은 네임스페이스 URI입니다.

다음 예제에서는 네임스페이스가 기본 네임스페이스가 되는 방식으로 선언된 특성이 포함된 XML 트리를 만듭니다.

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute("xmlns", "http://www.adventure-works.com"),
    new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
    New XAttribute("xmlns", "http://www.adventure-works.com"), _
    New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)

Visual Basic에서는 기본 네임스페이스를 만드는 네임스페이스 노드를 만드는 대신 일반적으로 전역 기본 네임스페이스 선언을 사용합니다.

Imports <xmlns='http://www.adventure-works.com'>

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child>content</Child>
            </Root>
        Console.WriteLine(root)
    End Sub
End Module

이 예제는 다음과 같은 출력을 생성합니다.

<Root xmlns="http://www.adventure-works.com">
  <Child>content</Child>
</Root>

XNamespace 원자화

XNamespace 개체는 원자화되도록 보장됩니다. 즉, 두 XNamespace 개체의 URI가 정확히 같으면 동일한 인스턴스를 공유합니다. 이 목적을 위해 같음 및 비교 연산자가 명시적으로 제공됩니다.

확장된 이름 사용

네임스페이스와 로컬 이름을 지정하는 또 다른 방법은 양식 {namespace}name에서 확장된 이름을 사용하는 것입니다.

XElement e = new XElement("{http://www.adventure-works.com}Root",
     new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
     New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)

이 예제는 다음과 같은 출력을 생성합니다.

<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />

이 방법에는 성능과 관련된 문제가 있습니다. 확장된 이름을 포함하는 문자열을 LINQ to XML에 전달할 때마다 이름을 구문 분석하고 원자화된 네임스페이스를 찾고 원자화된 이름을 찾아야 합니다. 이 과정에는 CPU 시간이 필요합니다. 성능이 중요한 경우 다른 방법을 사용할 수 있습니다.

Visual Basic에서는 확장된 이름을 사용하지 않는 XML 리터럴을 사용하는 것이 좋습니다.