XmlNamespaceManager를 사용하여 네임스페이스 관리
업데이트: November 2007
XmlNamespaceManager 클래스에는 네임스페이스 URI 및 해당 접두사의 컬렉션이 들어 있습니다. 이 클래스를 사용하여 컬렉션에서 네임스페이스를 확인, 추가 및 제거할 수 있습니다. 일부 컨텍스트에서 XML 처리 성능을 향상시키는 데 이 기능이 필요합니다. 예를 들어, XPath 지원을 위해 XsltContext 클래스에서 XmlNamespaceManager를 사용합니다. XsltContext 클래스에 대한 자세한 내용은 Microsoft 기술 자료 문서 Q324899, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual Basic .NET을 참조하십시오.
C# 언어에 대한 동일한 샘플을 보려면 Microsoft 기술 자료 문서 Q324462, HOW TO: Implement and Use Custom Extension Functions When You Execute XPath Queries in Visual C# .NET을 참조하십시오.
참고: |
---|
LINQ to XML을 사용하는 경우 네임스페이스를 관리하는 데 XmlNamespaceManager는 사용되지 않습니다. LINQ to XML을 사용할 때 네임스페이스를 관리하는 방법에 대한 내용은 XML 네임스페이스 작업을 참조하십시오. |
네임스페이스
네임스페이스 관리자를 만들면 세 개의 접두사가 클래스에 자동으로 추가됩니다. 다음 표에서는 이러한 세 개의 접두사 및 접두사가 나타내는 네임스페이스의 목록을 보여 줍니다.
접두사 |
네임스페이스 |
---|---|
xmlns |
http://www.w3.org/2000/xmlns/ |
xml |
http://www.w3.org/XML/1998/namespace |
String.Empty |
빈 네임스페이스. 이 값을 접두사로 할당할 수 있습니다. 예를 들어, 은 기본 네임스페이스를 빈 네임스페이스로 정의합니다. |
네임스페이스 관리자에 네임스페이스를 추가하려면 네임스페이스 관리자를 만든 다음 AddNamespace 메서드를 사용하십시오. 네임스페이스 관리자를 만들 때 XmlTextReader, XsltContext 또는 XmlDocument 클래스에서 NameTable을 사용할 수 있습니다. AddNamespace 메서드를 사용하여 사용자 지정 XmlNamespaceManager 개체를 만들고 적절한 네임스페이스 선언으로 채웁니다. 네임스페이스 정규화 요소 및 특성 이름을 참조하는 XPath 쿼리 식을 실행하기 위해 XmlNamespaceManager가 XmlDocument 클래스의 SelectNodes 또는 SelectSingleNode 메서드에 대한 매개 변수로 제공됩니다. 네임스페이스가 추가될 때는 다음 사항이 가정됩니다.
접두사 및 네임스페이스는 이미 확인되었으며 W3C 네임스페이스 사양을 준수합니다. 네임스페이스 관리자는 네임스페이스에 대한 확인 작업을 수행하지 않습니다.
AddNamespace 메서드를 사용하여 문자열을 추가하면 네임스페이스 관리자는 문자열을 분해합니다.
LookupNamespace 또는 LookupPrefix 메서드를 사용하여 조회를 수행하면 네임스페이스 관리자는 문자열을 분해합니다.
기본 접두사 및 네임스페이스 쌍은 네임스페이스 관리자를 만들 때 자동으로 추가됩니다.
네임스페이스 관리자는 네임스페이스 추가, 검색뿐 아니라 열거 지원을 구현합니다. 따라서 foreach 구문을 사용하여 네임스페이스 관리자에 저장된 정보를 반복하여 탐색할 수 있습니다. 네임스페이스 관리자가 nsmanager라는 이름으로 만들어진 경우 foreach (String prefix in nsmanager)을 사용하여 테이블을 반복해서 찾을 수 있습니다.
네임스페이스 관리자는 접두사와 네임스페이스의 문자열 비교를 개체로 제공하므로, 네임스페이스 관리자를 사용하면 직접적인 문자열 비교에 비해 성능이 향상됩니다.
네임스페이스 관리자에 네임스페이스를 추가하려면 AddNamespace 메서드를 사용하십시오. 다음 코드 예제에서는 접두사 xsd를 네임스페이스 URI http://www.w3.org/2001/XMLSchema에 바인딩하는 방법을 보여 줍니다.
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
예제
다음 코드 예제에서는 LookupNamespace 메서드를 사용하여 네임스페이스를 검색하는 방법을 보여 줍니다.
nsmgr.LookupNamespace("xsd")
nsmgr.LookupNamespace("xsd");
네임스페이스의 추가 및 검색을 보여 주는 보다 완전한 예제는 LookupNamespace 메서드에서 볼 수 있습니다.
다음 예제에서는 판독기의 NameTable을 사용하여 XmlNamespaceManager를 만듭니다.
Dim reader As New XmlTextReader("myfile.xml")
Dim nsmanager As New XmlNamespaceManager(reader.NameTable)
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books")
nsmanager.PushScope()
nsmanager.AddNamespace("msstore", "www.microsoft.com/store")
While reader.Read()
Console.WriteLine("Reader Prefix:{0}", reader.Prefix)
Console.WriteLine("XmlNamespaceManager Prefix:{0}",
nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)))
End While
XmlTextReader reader = new XmlTextReader("myfile.xml");
XmlNamespaceManager nsmanager = new XmlNamespaceManager(reader.NameTable);
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace("msstore", "www.microsoft.com/store");
while (reader.Read())
{
Console.WriteLine("Reader Prefix:{0}", reader.Prefix);
Console.WriteLine("XmlNamespaceManager Prefix:{0}",
nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)));
}