在XML入门学习中,名称空间用来解决不同XML词汇表中元素和属性同名冲突的问题。它通过一个唯一的URI来标识一组名字,使解析器能准确区分来源不同的标签。

为什么需要XML名称空间
当我们将多个系统的XML数据放在一起时,很可能出现同样的标签名但含义不同。例如下面的两份数据都用了<title>,一个是书名叫法,一个是网页标题:
<book> <title>XML基础</title> </book> <html> <title>我的站点</title> </html>
如果直接合并,程序无法判断<title>到底指什么。名称空间就是给这些名字划分领地。
如何声明名称空间
名称空间一般通过xmlns属性声明,可以绑定前缀,也可以设为默认。绑定前缀时,前缀后面跟冒号再写元素名。
带前缀的声明
<root xmlns:bk="http://ipipp.com/book" xmlns:web="http://ipipp.com/web"> <bk:title>XML基础</bk:title> <web:title>我的站点</web:title> </root>
这里bk和web是两个前缀,对应不同URI,以此区分title。
默认名称空间
如果不写前缀,直接写xmlns="URI",那么该元素及其子元素都归属这个空间。
<book xmlns="http://ipipp.com/book"> <title>XML基础</title> </book>
名称空间的使用要点
- URI只是标识符,不需要真去访问,常用http网址形式。
- 前缀只是简写,真正起区分作用的是绑定的URI。
- 属性也可带前缀归入某空间,不写则不属于任何空间。
简单代码示例
下面用Python自带的xml.etree来解析带名称空间的XML:
import xml.etree.ElementTree as ET
xml_text = '''<root xmlns:bk="http://ipipp.com/book">
<bk:title>XML基础</bk:title>
</root>'''
tree = ET.fromstring(xml_text)
# 通过带空间的标签名获取文本
title = tree.find('bk:title', {'bk': 'http://ipipp.com/book'})
print(title.text)
运行后会输出:XML基础。可以看到,解析时也要把前缀和URI对应起来。
小结
XML名称空间是入门阶段必须掌握的基础概念。它用URI加前缀的方式避免标签混淆,让XML在跨系统、多词汇表场景下依然保持清晰结构。写文档时合理声明xmlns,读文档时留意前缀绑定,就能轻松用好名称空间。
XMLXML_namespace名称空间修改时间:2026-07-30 10:12:19