XML命名空间深度解析 —— 命名空间简介
2014-05-26 18:47
316 查看
相信很多朋友都在使用XML存储和传输数据,在试用XML的过程中可能会对命名空间产生疑惑,本文试图通过实际例子带大家了解命名空间。
XML文件中最多的是element 和 attribute,每一个element和attribute名字可以试用prefix来修饰,也可以不用prefix修饰。
例1: 不带命名空间的element和attribute定义
<root attr="value"> </root>
在该例子中,root和att都没有prefix,所以他们不属于任何的命名空间
例2: 带命名空间的element和attribute定义
<pre:root pre:attr="value" xmlns:pre="namespace"> </pre:root>
在该例子中,root和att前面都有一个pre:修饰,表明这个element和attribute是属于pre这个prefix指定的命名空间的,而pre则是通过xmlns:pre="namespace"来定义的,即pre代表的是命名空间namespace
例3: 缺省的命名空间的element定义
<root attr="value" xmlns="namespace"> </root>
在该例子中,命名空间定义xmlns="namespace"中没有prefix,这就表明定义的是一个缺省的命名空间,表明从当前的element开始,包括所有的子element,只要他们前面没有prefix修饰,他们都属于缺省的命名空间namespace。
可能有人会问,该例子的attribute attr是否属于缺省命名空间,答案是否定的,不属于,因为对attribute而言,不能用缺省命名空间修饰,所以在该例子中attr不属于任何命名空间。
例4: prefix的重定义
<pre:root
pre:attr="value" xmlns:pre="namespace">
<pre:elem xmlns:pre="namespace1">
<pre:elem2/>
</pre:elem
</pre:root>
该例子中,在pre:root element里,prefix pre先是和命名空间namespace绑定在一起,但到了pre:elem element里,我们重新把pre和命名空间namespace1绑定,在其子element里试用了pre prefix,所以在该例子中element分别属于以下的命名空间:
root -> namespace
elem -> namespace1
elem2 -> namespace1
例5: 缺省空间的重定义
<root xmlns="namespace">
<elem xmlns="namespace1">
<elem2/>
</elem>
</root>
该例子和例子5相同element分别属于以下的命名空间:
root -> namespace
elem -> namespace1
elem2 -> namespace1
例6: 命名空间混合使用
<root xmlns="namespace" xmlns:pre="namespace1">
<elem xmlns="namespace1">
<pre:elem2/>
</elem>
</root>
root -> namespace
elem -> namespace1
elem2 -> namespace1
例7: 相同命名空间绑定不同的prefix
<root xmlns="namespace" xmlns:pre="namespace">
<pre:elem xmlns:pre1="namespace">
<pre1:elem2/>
</elem>
</root>
XML文件中最多的是element 和 attribute,每一个element和attribute名字可以试用prefix来修饰,也可以不用prefix修饰。
例1: 不带命名空间的element和attribute定义
<root attr="value"> </root>
在该例子中,root和att都没有prefix,所以他们不属于任何的命名空间
例2: 带命名空间的element和attribute定义
<pre:root pre:attr="value" xmlns:pre="namespace"> </pre:root>
在该例子中,root和att前面都有一个pre:修饰,表明这个element和attribute是属于pre这个prefix指定的命名空间的,而pre则是通过xmlns:pre="namespace"来定义的,即pre代表的是命名空间namespace
例3: 缺省的命名空间的element定义
<root attr="value" xmlns="namespace"> </root>
在该例子中,命名空间定义xmlns="namespace"中没有prefix,这就表明定义的是一个缺省的命名空间,表明从当前的element开始,包括所有的子element,只要他们前面没有prefix修饰,他们都属于缺省的命名空间namespace。
可能有人会问,该例子的attribute attr是否属于缺省命名空间,答案是否定的,不属于,因为对attribute而言,不能用缺省命名空间修饰,所以在该例子中attr不属于任何命名空间。
例4: prefix的重定义
<pre:root
pre:attr="value" xmlns:pre="namespace">
<pre:elem xmlns:pre="namespace1">
<pre:elem2/>
</pre:elem
</pre:root>
该例子中,在pre:root element里,prefix pre先是和命名空间namespace绑定在一起,但到了pre:elem element里,我们重新把pre和命名空间namespace1绑定,在其子element里试用了pre prefix,所以在该例子中element分别属于以下的命名空间:
root -> namespace
elem -> namespace1
elem2 -> namespace1
例5: 缺省空间的重定义
<root xmlns="namespace">
<elem xmlns="namespace1">
<elem2/>
</elem>
</root>
该例子和例子5相同element分别属于以下的命名空间:
root -> namespace
elem -> namespace1
elem2 -> namespace1
例6: 命名空间混合使用
<root xmlns="namespace" xmlns:pre="namespace1">
<elem xmlns="namespace1">
<pre:elem2/>
</elem>
</root>
root -> namespace
elem -> namespace1
elem2 -> namespace1
例7: 相同命名空间绑定不同的prefix
<root xmlns="namespace" xmlns:pre="namespace">
<pre:elem xmlns:pre1="namespace">
<pre1:elem2/>
</elem>
</root>
相关文章推荐
- 使用SQL Server的OpenXML解析带有命名空间的XML片段
- JAXB解析xml时忽略命名空间的方法
- java学习脚印:SAX解析xml时命名空间以及参数问题(敏捷版)
- XML的命名空间与python解析方法
- jaxb解析xml忽略命名空间
- xml 解析 命名空间
- .net关于xml文件命名空间的解析读取
- 解析带有命名空间问题web.xml
- 解析带有命名空间的xml,并实例化
- 带有命名空间的xml解析,C#
- .NET 对含有命名空间的xml解析
- 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作
- 解析带有命名空间xmlns的xml文件 (XML解析中的namespace初探)
- 多命名空间的 Xml 文档解析
- 解决dom4j无法解析xml命名空间的问题
- dom4j 解析带命名空间的XML
- dom4j解析带命名空间的xml
- Windows Phone 解析带有命名空间的xml数据
- Dom4j解析带有命名空间的XML文件
- Dom4j解析带有命名空间的XML文件