管理 XML 文件中的命名空間Managing Namespaces in an XML Document

XML 命名空間會將 XML 文件中的項目與屬性名稱連結到自訂和預定的 URI。XML namespaces associate element and attribute names in an XML document with custom and predefined URIs. 若要建立這些關聯,請為命名空間 URI 定義前置詞,並使用這些前置詞來限定 XML 資料中的元素與屬性名稱。To create these associations, you define prefixes for namespace URIs, and use those prefixes to qualify element and attribute names in XML data. 命名空間可用來避免元素和屬性名稱發生衝突,並讓相同名稱的元素和屬性以不同方式處理和驗證。Namespaces prevent element and attribute name collisions, and enable elements and attributes of the same name to be handled and validated differently.

宣告命名空間Declaring namespaces

若要在元素上宣告命名空間,請使用 xmlns: 屬性:To declare a namespace on an element, you use the xmlns: attribute:

xmlns:<name>=<"uri">

其中 <name> 是命名空間前置詞,而 <"uri"> 則是識別命名空間的 URI。where <name> is the namespace prefix and <"uri"> is the URI that identifies the namespace. 在宣告前置詞之後,您可以用它來限定 XML 文件中的元素和屬性,並將其與命名空間 URI 產生關聯。After you declare the prefix, you can use it to qualify elements and attributes in an XML document and associate them with the namespace URI. 因為命名空間前置詞會用於整份文件,所以其長度應該短一點。Because the namespace prefix is used throughout a document, it should be short in length.

這個範例會定義兩個 BOOK 元素。This example defines two BOOK elements. 第一個元素由前置詞 mybook 所限定,而第二個元素則由前置詞 bb 所限定。The first element is qualified by the prefix, mybook, and the second element is qualified by the prefix, bb. 每個前置詞都與不同的命名空間 URI 相關:Each prefix is associated with a different namespace URI:

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

若要表示某元素是特定命名空間的一部分,請將命名空間前置詞加到其中。To signify that an element is a part of a particular namespace, add the namespace prefix to it. 例如,如果 Author 元素屬於 mybook 命名空間,便會將它宣告為 <mybook:Author>For example, if a Author element belongs to the mybook namespace, it is declared as <mybook:Author>.

宣告範圍Declaration scope

命名空間的有效範圍,是從宣告點至宣告該命名空間之元素的結尾。A namespace is effective from its point of declaration until the end of the element it was declared in. 在此範例中,於 BOOK 元素中定義的命名空間並不適用於 BOOK 元素以外的元素,如 Publisher 元素:In this example, the namespace defined in the BOOK element doesn't apply to elements outside the BOOK element, such as the Publisher element:

<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 文件的最前面。A namespace must be declared before it can be used, but it doesn't have to appear at the top of the XML document.

當您在 XML 文件中使用多個命名空間時,您可以定義一個命名空間當做預設命名空間,以便建立更易讀取的文件。When you use multiple namespaces in an XML document, you can define one namespace as the default namespace to create a cleaner looking document. 預設命名空間會在根元素中宣告,並且套用到文件中所有非限定的元素。The default namespace is declared in the root element and applies to all unqualified elements in the document. 預設命名空間僅適用於元素,不適用於屬性。Default namespaces apply to elements only, not to attributes.

若要使用預設命名空間,請在元素的宣告中省略前置詞和冒號:To use the default namespace, omit the prefix and the colon from the declaration on the element:

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

管理命名空間Managing namespaces

XmlNamespaceManager 類別會保存命名空間 URI 和其前置詞的集合,並讓您從這個集合查詢、加入及移除命名空間。The XmlNamespaceManager class stores a collection of namespace URIs and their prefixes, and lets you look up, add, and remove namespaces from this collection. 某些內容中需要使用這個類別,才能改善 XML 處理效能。In certain contexts, this class is required for better XML processing performance. 例如,XsltContext 類別會使用 XmlNamespaceManager,以提供 XPath 支援。For example, the XsltContext class uses XmlNamespaceManager for XPath support.

命名空間管理員不會在命名空間上執行任何驗證,而是會假設前置詞和命名空間已經過驗證並且符合 W3C 命名空間規格。The namespace manager doesn't perform any validation on the namespaces, but assumes that prefixes and namespaces have already been verified and conform to the W3C Namespaces specification.

注意

C#Visual Basic 中的 LINQ TO XML 不會使用 XmlNamespaceManager 管理命名空間。LINQ TO XML in C# and Visual Basic don't use XmlNamespaceManager to manage namespaces. 如需在使用 LINQ to XML 時管理命名空間的資訊,請參閱 LINQ 文件中的處理 XML 命名空間 (C#)處理 XML 命名空間 (Visual Basic)See Working with XML Namespaces (C#) and Working with XML Namespaces (Visual Basic) in the LINQ documentation for information about managing namespaces when using LINQ to XML.

以下是您可以使用 XmlNamespaceManager 類別執行的一些管理和查詢工作。Here are some of the management and lookup tasks you can perform with the XmlNamespaceManager class. 如需詳細資訊和範例,請追蹤每個方法或屬性的參考頁面連結。For more information and examples, follow the links to the reference page for each method or property.

To 使用Use
加入命名空間Add a namespace AddNamespace 方法AddNamespace method
移除命名空間Remove a namespace RemoveNamespace 方法RemoveNamespace method
尋找預設命名空間的 URIFind the URI for the default namespace DefaultNamespace 屬性DefaultNamespace property
尋找命名空間前置詞的 URIFind the URI for a namespace prefix LookupNamespace 方法LookupNamespace method
尋找命名空間 URI 的前置詞Find the prefix for a namespace URI LookupPrefix 方法LookupPrefix method
取得目前節點中的命名空間清單Get a list of namespaces in the current node GetNamespacesInScope 方法GetNamespacesInScope method
設定命名空間的範圍Scope a namespace PushScopePopScope 方法PushScope and PopScope methods
檢查前置詞是否定義於目前範圍中Check whether a prefix is defined in the current scope HasNamespace 方法HasNamespace method
取得用來查詢前置詞與 URI 的名稱資料表Get the name table used to look up prefixes and URIs NameTable 屬性NameTable property

另請參閱See also