XML 命名空间
- 目录
命名空间的作用
命名空间的作用是避免xml中元素命名的冲突。举例来说我们都可以定义自己的元素名,元素在一个xml文件里面它的含义是表格,在另一个xml文件里可以把它定义为桌子。示例如下代码:表格里可以有、标签,桌子里可以有
椅子标签。如果这两个同名的不同意的含义放在一起使用,我们如何知道table 究竟是表格还是桌子?如果应用程序解析xml时,解析到table元素,要解析它是桌子还是表格?由命名空间来告诉你。 --表格
<table>
<tr>
<td>name</td>
<td>age</td>
</tr>
</table>
--桌子
<table>
<chair>4</chair>
</table>
命名空间的使用
命名空间定义格式( XML Namespace (xmlns) 属性)
- namespace-prefix: 定义的前缀标识
- namespaceURI: 用于标示命名空间的地址
xmlns:namespace-prefix=“namespaceURI”
示例
<?xml version=”1.0” encoding=”UTF-8”?>
<h:td>name</h:td>
<h:td>age</h:td>
namespaceURI是唯一的,两个xml文件中如果定义了相同的namespaceURI,代表了定义这个命名空间的元素及其子元素中带有namespace-prefix前缀的元素是拥有相同含义的。
- namespaceURI没有要求能够被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。
- 所以如上只有table及table下的子元素含有h前缀的才是属于该命名空间下的元素,如果没有h前缀元素,则不属于该命名空间,不能按该命名空间的定义去解析该标签。
- 通过这种方式,两个xml文件只需要为 table 定义各自的命名空间,程序就能根据命名空间“分辨”出这两个table不同的含义,按不同的算法去解析它们。
默认的命名空间(Default Namespaces)
- 默认命名空间格式
xmlns=“namespaceURI”
示例
<?xml version=”1.0” encoding=”UTF-8”?>
name age 很明显我们看出了不同,少了前缀。定义了默认命名空间格式,定义该命名空间的元素及其子元素都归属于该命名空间之下。这样主要是为了方便xml书写。
定义多个命名空间
示例
<?xml version=”1.0” encoding=”UTF-8”?>
<h:td>
<s:table xmlns:s="http://www.w3.org/SW/html4/">
<s:chair>4</s:chair>
</s:table>
</h:td>
如上我定义了两个命名空间,一个是前缀h的,另一个是前缀s的。虽然两个table嵌套使用,但应用程序根据命名空间依旧能正确的解析。
- 所以理论上你可以在一个xml文件中定义无数多个标识地址不同的命名空间。
- 如果两个及两个以上的命名空间,且它们两两嵌套使用时,至多只有一个命名空间可以设置为默认的命名空间。
参考
- http://www.w3school.com.cn/xml/xml_namespaces.asp
还没有评论,来说两句吧...