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 方法 |
限定命名空间的范围 | PushScope 和 PopScope 方法 |
检查是否在当前范围内定义了前缀 | HasNamespace 方法 |
获取用于查找前缀和 URI 的名称表 | NameTable 属性 |