命名空间通过xmlns声明避免XML元素冲突,支持前缀(如xmlns:isbn=”URI”)和默认命名空间(xmlns=”URI”),作用范围从声明元素起至其子元素,可被重新定义覆盖,确保文档结构清晰与互操作性。

在XML中,命名空间用来避免元素和属性名称的冲突,特别是在合并多个XML文档或使用不同来源的标签时。命名空间通过xmlns属性声明,可以绑定一个前缀或作为默认命名空间。
带前缀的命名空间声明
使用前缀可以为特定元素及其子元素指定命名空间。格式如下:
xmlns:前缀=”URI”
示例:
<book xmlns:isbn=”http://example.com/isbn”>
<isbn:number>978-3-16-148410-0</isbn:number>
</book>
这里isbn是前缀,http://example.com/isbn是命名空间URI,表示该命名空间下的number元素属于ISBN相关数据。
默认命名空间声明
如果不希望每个元素都加前缀,可以使用默认命名空间:
xmlns=”URI”
示例:
<book xmlns=”http://example.com/book”>
<title>XML Guide</title>
<author>John Doe</author>
</book>
在这个例子中,book、title和author都属于http://example.com/book命名空间,因为没有前缀且定义了默认命名空间。
命名空间的作用范围
命名空间声明从其所在的元素开始,作用于该元素及其所有子元素,除非被子元素重新声明覆盖。
例如:
<root xmlns:a=”http://a.com”>
<a:item>In Namespace A</a:item>
<item xmlns=”http://default.com”>Now in default namespace</item>
</root>
第一个item属于http://a.com,第二个则属于新的默认命名空间http://default.com。
注意事项
- 命名空间使用URI(通常是URL)标识,但不一定要指向可访问的资源,仅作唯一标识用。
- 前缀名称本身无意义,重要的是它绑定的URI。
- 尽量使用公司域名反写等方式确保命名空间唯一性。
- xml解析器会根据完整的命名空间URI来区分元素,而不是前缀名。
基本上就这些。正确使用命名空间能有效组织复杂文档结构,提升XML的互操作性和可维护性。