管理 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 属性

另请参阅