管理 XML 文件中的命名空間

XML 命名空間會將 XML 文件中的項目與屬性名稱連結到自訂和預定的 URI。 若要建立這些關聯,請為命名空間 URI 定義前置詞,並使用這些前置詞來限定 XML 資料中的元素與屬性名稱。 命名空間可用來避免元素和屬性名稱發生衝突,並讓相同名稱的元素和屬性以不同方式處理和驗證。

宣告命名空間

若要在元素上宣告命名空間,請使用 xmlns: 屬性:

xmlns:<name>=<"uri">

其中 <name> 是命名空間前置詞,而 <"uri"> 則是識別命名空間的 URI。 在宣告前置詞之後,您可以用它來限定 XML 文件中的元素和屬性,並將其與命名空間 URI 產生關聯。 因為命名空間前置詞會用於整份文件,所以其長度應該短一點。

這個範例會定義兩個 BOOK 元素。 第一個元素由前置詞 mybook 所限定,而第二個元素則由前置詞 bb 所限定。 每個前置詞都與不同的命名空間 URI 相關:

<mybook:BOOK xmlns:mybook="http://www.contoso.com/books.dtd">  
    <bb:BOOK xmlns:bb="urn:blueyonderairlines" />
</mybook:BOOK>

若要表示某元素是特定命名空間的一部分,請將命名空間前置詞加到其中。 舉例來說,如果 Author 元素屬於 mybook 命名空間,就會宣告為 <mybook:Author>

宣告範圍

命名空間的有效範圍,是從宣告點至宣告該命名空間之元素的結尾。 在此範例中,於 BOOK 元素中定義的命名空間並不適用於 BOOK 元素以外的元素,如 Publisher 元素:

<Author>Joe Smith</Author>  
<BOOK xmlns:book="http://www.contoso.com">  
    <title>My Wonderful Day</title>  
      <price>$3.95</price>  
</BOOK>  
<Publisher>  
    <Name>MSPress</Name>  
</Publisher>  

雖然命名空間必須先行宣告才能使用,但它不必出現在 XML 文件的最前面。

當您在 XML 文件中使用多個命名空間時,您可以定義一個命名空間當做預設命名空間,以便建立更易讀取的文件。 預設命名空間會在根元素中宣告,並且套用到文件中所有非限定的元素。 預設命名空間僅適用於元素,不適用於屬性。

若要使用預設命名空間,請在元素的宣告中省略前置詞和冒號:

<BOOK xmlns="http://www.contoso.com/books.dtd">  
...
</BOOK>

管理命名空間

XmlNamespaceManager 類別會保存命名空間 URI 和其前置詞的集合,並讓您從這個集合查詢、加入及移除命名空間。 某些內容中需要使用這個類別,才能改善 XML 處理效能。 例如,XsltContext 類別會使用 XmlNamespaceManager,以提供 XPath 支援。

命名空間管理員不會在命名空間上執行任何驗證,而是會假設前置詞和命名空間已經過驗證並且符合 W3C 命名空間規格。

注意

C#Visual Basic 中的 LINQ TO XML 不會使用 XmlNamespaceManager 管理命名空間。 如需在使用 LINQ to XML 時管理命名空間的資訊,請參閱 LINQ 文件中的處理 XML 命名空間 (C#)處理 XML 命名空間 (Visual Basic)

以下是您可以使用 XmlNamespaceManager 類別執行的一些管理和查詢工作。 如需詳細資訊和範例,請追蹤每個方法或屬性的參考頁面連結。

使用
加入命名空間 AddNamespace 方法
移除命名空間 RemoveNamespace 方法
尋找預設命名空間的 URI DefaultNamespace 屬性
尋找命名空間前置詞的 URI LookupNamespace 方法
尋找命名空間 URI 的前置詞 LookupPrefix 方法
取得目前節點中的命名空間清單 GetNamespacesInScope 方法
設定命名空間的範圍 PushScopePopScope 方法
檢查前置詞是否定義於目前範圍中 HasNamespace 方法
取得用來查詢前置詞與 URI 的名稱資料表 NameTable 屬性

另請參閱