xml命名空间是用于区分不同来源同名标签的唯一标识符,通常为URI。通过xmlns定义,默认命名空间作用于无前缀元素,带前缀的命名空间如xmlns:html=”http://www.w3.org/1999/xhtml”可明确指向特定标准,前缀仅为别名,真正起作用的是URI,且命名空间具有继承性,子元素可覆盖父元素定义。

在XML中,命名空间(Namespace)用于解决元素和属性名称的冲突问题,尤其是在多个XML文档或不同标准混合使用时。通过命名空间,可以明确区分来自不同来源的同名标签,确保解析的准确性。
什么是XML命名空间?
命名空间是一个唯一的标识符(通常是一个URI),用来为XML元素和属性提供上下文环境。它防止了不同词汇表之间的名称冲突。例如,一个table可能表示HTML表格,也可能表示数据库表,命名空间可以帮助区分它们。
如何定义命名空间?
使用xmlns属性来定义命名空间。它可以出现在任何元素上,作用范围从该元素开始,包含其所有子元素。
- 定义默认命名空间:
<root xmlns=”http://example.com/ns”>
此后所有未加前缀的元素都属于这个命名空间。 - 定义带前缀的命名空间:
<root xmlns:html=”http://www.w3.org/1999/xhtml”>
这样html:table就明确指向HTML规范中的table元素。
如何使用命名空间?
一旦定义了命名空间,就可以在元素或属性中使用它。注意前缀只是别名,真正起作用的是背后的URI。
- 使用前缀调用命名空间内的元素:
<html:div>内容</html:div> - 属性也可以使用命名空间:
<img xlink:href=”image.jpg” xmlns:xlink=”http://www.w3.org/1999/xlink”/> - 同一个元素可同时包含默认命名空间和带前缀的空间:
<doc xmlns=”http://default.ns” xmlns:meta=”http://meta.example”>
命名空间的作用域与继承
命名空间具有作用域,定义后会被子元素自动继承。若想覆盖,可在子元素重新定义相同前缀指向不同的URI。
例如:
<root xmlns:ns=”http://old”>
<child xmlns:ns=”http://new”>这里ns指向new地址</child>
</root>
上面例子中,child及其后代中的ns:前缀将使用新的URI。
基本上就这些。只要记住:命名空间靠URI识别,前缀可变但URI不变;合理使用能有效避免标签混淆,提升XML的互操作性。


