XML命名空间是XML标准中定义的一种机制,主要作用是避免不同来源的XML元素或属性出现名称重复的问题,通过给元素和属性绑定唯一标识的前缀或者默认命名空间,让解析器能够准确区分不同含义的同名内容。

XML命名空间的核心概念
XML文档允许自定义元素和属性名称,当多个不同来源的XML内容合并时,可能出现同名元素表示不同含义的情况,比如一个文档中的<table>表示表格,另一个文档中的<table>表示家具中的桌子,解析器无法区分二者的差异,命名空间就是用来解决这个问题的。
命名空间通过统一资源标识符(URI)来唯一标识,这个URI不需要是实际可访问的网络地址,只要能保证唯一性即可,常见的命名空间URI会使用域名相关的字符串,比如http://www.example.org/table。
XML Namespace属性的声明方式
XML命名空间的声明通过xmlns属性实现,主要分为两种声明方式:默认命名空间和带前缀的命名空间。
1. 默认命名空间
默认命名空间不需要前缀,声明后该元素及其所有子元素如果没有指定其他命名空间,都属于这个默认命名空间,声明格式为xmlns="命名空间URI"。
示例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://ipipp.com/furniture">
<name>木质桌子</name>
<length>120</length>
<width>60</width>
</table>
上面的示例中,<table>元素声明了默认命名空间,其下的<name>、<length>、<width>子元素都属于http://ipipp.com/furniture这个命名空间,表示家具类的桌子。
2. 带前缀的命名空间
带前缀的命名空间需要给命名空间定义一个短前缀,之后使用该前缀来标识属于该命名空间的元素和属性,声明格式为xmlns:前缀="命名空间URI"。
示例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<furniture:table xmlns:furniture="http://ipipp.com/furniture">
<furniture:name>木质桌子</furniture:name>
<furniture:length>120</furniture:length>
</furniture:table>
<doc:table xmlns:doc="http://ipipp.com/document">
<doc:row>
<doc:cell>第一行第一列</doc:cell>
</doc:row>
</doc:table>
</root>
上面的示例中,通过furniture和doc两个不同的前缀,区分了表示家具的<table>和表示文档表格的<table>,避免了名称冲突。
XML命名空间的常见用法
1. 合并不同来源的XML内容
当需要将多个不同系统的XML数据合并到一个文档中时,使用命名空间可以清晰区分不同来源的元素,避免解析错误。
<?xml version="1.0" encoding="UTF-8"?>
<order xmlns:user="http://ipipp.com/user" xmlns:product="http://ipipp.com/product">
<user:info>
<user:name>张三</user:name>
<user:phone>13800138000</user:phone>
</user:info>
<product:info>
<product:name>笔记本电脑</product:name>
<product:price>4999</product:price>
</product:info>
</order>
2. 配合XML Schema校验文档
XML Schema(XSD)中会通过命名空间来关联校验规则,文档中声明的命名空间需要和XSD中定义的目标命名空间一致,才能正确进行校验。
<?xml version="1.0" encoding="UTF-8"?>
<user xmlns="http://ipipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ipipp.com/user user.xsd">
<name>李四</name>
<age>25</age>
</user>
上面的示例中,xsi:schemaLocation属性指定了命名空间http://ipipp.com/user对应的XSD校验文件为user.xsd,解析器会根据该规则校验XML文档的合法性。
命名空间使用的注意事项
- 命名空间URI只需要保证唯一性,不需要是可访问的网络地址,通常使用域名相关的字符串可以减少冲突概率。
- 前缀只是命名空间的别名,不同前缀如果指向同一个URI,解析时会视为同一个命名空间。
- 属性默认不属于任何命名空间,除非显式给属性添加命名空间前缀。
- 命名空间的作用范围是声明该命名空间的元素及其所有子元素,除非子元素重新声明了其他命名空间。
注意:XML命名空间的声明是区分大小写的,xmlns和XMLNS会被视为不同的属性,编写时需要严格按照规范使用小写。
XMLXML_Namespace命名空间XML属性修改时间:2026-06-08 22:51:21