XmlNamespaceManager 類別可以用來解析、加入、移除一個集合的命名空間,並提供命名空間的命名空間範圍管理。在您要保留集合中的命名空間時可以建立一個 XmlNamespaceManager 類別,然後將集合連結命名空間前置詞和它們的 URI。The XmlNamespacemanager 也被 XsltContext 類別用來支援 XPath。如需 XsltContextClass 的詳細資訊,請參閱文件 Q324899<最佳作法:當您在 Visual Basic .NET 中執行 XPath 查詢時,實作與使用自訂的延伸功能>(英文)。
如需以 C# 語言撰寫的相同範例,請參閱 Microsoft Knowledge Base (https://support.microsoft.com) 的 Microsoft 知識庫文件 Q324462<最佳作法:當您在 Visual C# .NET 中執行 XPath 查詢時,實作與使用自訂的延伸功能>(英文)。
命名空間
當命名空間管理員建立之後,會在類別中自動加入三個前置詞。下列表格列出這三個前置詞,以及它們所代表的命名空間。
| 前置詞 | 命名空間 |
|---|---|
xmlns |
http://www.w3.org/2000/xmlns/ |
xml |
http://www.w3.org/XML/1998/namespace |
String.Empty |
空的命名空間。這個值可指派給前置詞。例如, 可以將預設的命名空間定義成空的命名空間。 |
若要將命名空間加入命名空間管理員內,請建立一個命名空間管理員,然後使用 AddNamespace 方法來加入命名空間。建立命名空間管理員時,可使用 XmlTextReader 或 XsltContext 類別的 NameTable。您也可以使用 XmlDocument 的 NameTable。建立自訂的 XmlNamespaceManager 物件之後,請使用 AddNamespace 方法填入適當的命名空間宣告,然後將其提供給 XmlDocument 類別的 SelectNodes 與 SelectSingleNode 方法作為參數,對參考命名空間相符的項目與屬性名稱的 XPath 查詢運算式加以執行。加入命名空間時將有下列幾項假設:
前置詞和命名空間已完成確認,且它們都遵循 W3C Namespaces 規格。命名空間管理員不會在命名空間上執行任何驗證。
使用 AddNamespace 方法加入字串時,命名空間管理員時會儘量縮減字串。
使用 LookupNamespace 或 LookupPrefix 方法查詢時,命名空間管理員儘量縮減字串。
預設的前置詞和命名空間配對會在建立時自動加入命名空間管理員內。
命名空間管理員除了會加入和擷取命名空間之外,還實作列舉型別支援。因此您可以使用 foreach 建構,逐一查看命名空間管理員內所儲存的資訊。假設命名空間管理員是以 nsmanager 名稱建立,則您可以使用 foreach (String prefix in nsmanager) 逐一查看資料表。
因為命名空間管理員提供一個將前置詞和命名空間當作物件的字串比較功能,所以使用命名空間管理員的效能會比直接比較字串來得高。
方法若要將命名空間加入命名空間管理員中,請使用 AddNamespace 方法。下列程式碼範例顯示如何繫結前置詞 xsd 與 http://www.w3.org/2001/XMLSchema 的命名空間 URI:
[Visual Basic]
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
[C#]
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
範例
下列程式範例說明,接著如何使用 LookupNamespace 方法尋找命名空間:
[Visual Basic]
nsmgr.LookupNamespace("xsd")
[C#]
nsmgr.LookupNamespace("xsd");
如需加入和擷取命名空間的較完整範例,請參閱 LookupNamespace 方法。
下列範例使用讀取器 (Reader) 的 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)));
}