如何在XML中使用命名空间前缀

XML命名空间通过xmlns:前缀="URI"声明绑定,用前缀:本地名引用;前缀作用域限于声明元素及其子元素,URI仅作唯一标识;默认命名空间(xmlns="URI")影响无前缀名称,与带前缀命名空间互不干扰。

在XML中使用命名空间前缀,核心是通过xmlns:前缀="URI"声明绑定,并在元素或属性中用前缀:本地名来引用该命名空间下的名称。

声明命名空间前缀

在起始标签(通常是根元素)中使用xmlns:前缀属性,将前缀与一个唯一的命名空间URI关联。URI只是标识符,不一定要可访问。

  • —— 声明前缀bk指向http://example.com/books
  • 前缀可以是任意合法的XML名称(如nsabcxsi),但不能是xml(已预定义)或xmlns(用于声明本身)

在元素和属性中使用前缀

声明后,可在同一元素及其子元素中用前缀:本地名形式标记属于该命名空间的元素或属性。

  • XML Guide —— bk:bookbk:title都属于http://example.com/books命名空间
  • Jane Doe —— 属性bk:lang也受该命名空间约束(除非显式声明为无命名空间)

区分默认命名空间与带前缀命名空间

默认命名空间(xmlns="URI")作用于当前元素及其未加前缀的子元素,但它不影响带前缀的名称;而前缀命名空间只对明确使用该前缀的名称生效。

  • ...... —— element属于默认命名空间,ext:item属于http://extra.com
  • 避免混用:不要用xmlns=""意外取消默认命名空间,导致预期外的无命名空间元素

常见注意事项

命名空间前缀的作用域从声明处开始,到对应结束标签为止;嵌套声明会覆盖同名前缀;解析器按URI而非前缀识别命名空间。

  • 前缀本身无语义,bk:booklib:book只要URI相同,就表示同一个命名空间中的同名元素
  • XML Schema实例常用xsi:type,其中xsi必须声明为xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  • 确保URI拼写完全一致(包括大小写和末尾斜杠),否则视为不同命名空间