다음을 통해 공유


System.Xml.Linq.XName 클래스

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

XML 이름에는 네임스페이스와 로컬 이름이 포함됩니다. 정규화된 이름은 네임스페이스와 로컬 이름의 조합입니다.

XName 개체 만들기

XName 는 공용 생성자를 포함하지 않습니다. 대신, 이 클래스는 String의 암시적 변환을 제공하여 XName을 만들 수 있게 해줍니다. 이 변환을 사용하는 가장 일반적인 위치는 요소 또는 특성을 생성할 때입니다. 생성자에 대한 XElement 첫 번째 인수는 XName입니다. 문자열을 전달하면 암시적 변환을 활용합니다. 다음 코드는 네임스페이스가 없는 이름의 요소를 만듭니다.

XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);

Visual Basic에서는 XML 리터럴을 사용하는 것이 더 적합합니다.

Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)

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

<ElementName>content</ElementName>

XName에 문자열을 할당할 때 String의 암시적 변환이 사용됩니다.

Visual Basic 예제에서는 XML 리터럴을 사용하여 XElement을 만듭니다. XML 리터럴을 사용하더라도 XName 개체가 XElement을 위해 생성됩니다.

또한 Get 메서드를 XName 개체에 대해 호출할 수 있습니다. 그러나 문자열에서 암시적 변환을 사용하는 것이 좋습니다.

네임스페이스에 XName 만들기

XML XName과 마찬가지로 네임스페이스에 있을 수도 있고, 없을 수도 있습니다.

C#에서 네임스페이스 내에서 XName을(를) 생성할 때 권장되는 방법은 XNamespace 객체를 선언한 후 더하기 연산자의 재정의를 사용하는 것입니다.

Visual Basic의 경우 XML 리터럴 및 전역 네임스페이스 선언을 사용하여 네임스페이스에 있는 XML을 만드는 것이 좋습니다.

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">

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

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

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

네임스페이스 없이 XName 만들기

Namespace 개체의 XName 속성은 null이 아님을 보장합니다. 네임스페이스 XName가 없으면 Namespace 속성이 None로 설정됩니다. 다음 코드는 다음을 보여 줍니다.

XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
    Console.WriteLine("The element is in no namespace.");
else
    Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
    Console.WriteLine("The element is in no namespace.")
Else
    Console.WriteLine("The element is in a namespace.")
End If

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

The element is in no namespace.

확장된 이름 사용

확장된 XML 이름에서 다음 형식XName으로 만들 {namespace}localname 수도 있습니다.

XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)

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

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

확장된 이름을 통해 XName 을 만드는 것은 XNamespace 객체를 만들고 더하기 연산자를 재정의하여 사용하는 것보다 효율성이 떨어집니다. 또한 Visual Basic에서 전역 네임스페이스를 가져오고 XML 리터럴을 사용하는 것보다 효율성이 떨어집니다.

확장된 이름을 사용하여 XName를 생성하는 경우, LINQ to XML은 네임스페이스의 원자화된 인스턴스를 찾아야 합니다. 확장된 이름을 사용할 때마다 이 작업을 반복해야 합니다. LINQ 쿼리를 작성할 때 이 추가 시간은 무시할 수 있습니다. 그러나 큰 XML 트리를 만들 때 중요할 수 있습니다.

XName 개체는 원자화됩니다.

XName 개체는 원자화되도록 보장됩니다. 즉, 두 XName 개체가 정확히 동일한 네임스페이스와 정확히 동일한 로컬 이름을 갖는 경우 동일한 인스턴스를 공유합니다. 이 목적을 위해 같음 및 비교 연산자도 명시적으로 제공됩니다.

다른 이점 중에서도 이 기능을 사용하면 쿼리를 더 빠르게 실행할 수 있습니다. 요소 또는 특성의 이름을 필터링할 때 조건자에서 표현된 비교는 값 비교가 아닌 ID 비교를 사용합니다. 두 개의 참조가 두 문자열을 비교하는 것보다 실제로 동일한 개체를 참조하는지 확인하는 것이 훨씬 빠릅니다.