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.

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

네임스페이스에 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 이름에서 다음 형식{namespace}localname으로 만들 XName 수도 있습니다.

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 비교를 사용합니다. 두 개의 참조가 두 문자열을 비교하는 것보다 실제로 동일한 개체를 참조하는지 확인하는 것이 훨씬 빠릅니다.