XML命名空间深度解析 —— XML1.0和XML1.1区别
在文章 XML命名空间深度解析 —— 命名空间简介 中对XML命名空间进行了简单介绍,本文将会对命名空间在XML1.0 和 XML1.1中的区别进行介绍。让我们从一个小的例子开始命名空间之旅。
例1: XML1.0中命名空间定义为空 <XML version="1.0"> <root xmlns:pre=""> </root> 在该例中,在通过xmlns绑定命名空间的时候,命名空间的url为空,即"",如果试图去解析该文件,将会报出一个错误: The value of the attribute "prefix="xmlns",localpart="pre",rawname="xmlns:pre"" is invalid. Prefixed namespace
报错的原因是在XML1.0规范明确规定不允许把prefix绑定到空的URL上,所以报错。那在XML1.1中会怎样呢? 例2: XML1.1中命名空间定义为空 <XML version="1.1"> <root xmlns:pre=""> </root> 解析可以发现,没有报错,因为在XML1.1中是允许通过把URL设置成空来解除命名空间和prefix的绑定。
例2: XML1.1中命名空间和prefix解除绑定
<XML version="1.1"> <pre:root xmlns:pre="url"> <ibm xmlns:pre=""/> </pre:root> 在该例子中,root element里把命名空间rul和pre绑定,也就是在整个root范围内pre都是生效的,但到了root的子element ibm, 使用xmlns:pre=""解除了这种绑定,也就是在ibm这个element范围内,pre将不生效了。这也就是为什么例3中xml文件解析会失败的原因。
例3: XML1.1中命名空间和prefix解除绑定 <XML version="1.1"> <pre:root xmlns:pre="url"> <pre:ibm xmlns:pre=""/> </pre:root> 对该xml文件的解析将会报出 pre is unbound.经过以上3个例子,相信大家都了解到了XML1.0和XML1.1中命名空间的区别,那么紧接着的问题就是如果是针对缺省命名空间呢?
例4: XML1.0中缺省命名空间定义为空 <XML version="1.0"> <root xmlns=""> </root> 对该xml文件的解析将会成功,针对缺省命名空间,XML1.0和XML1.1都支持通过空url解除绑定。
例5: XML1.0中解除缺省命名空间绑定 <XML version="1.0"> <root xmlns="url"> <ibm xmlns=""/> </root> 对该xml文件的解析将会成功,ibm将不属于任何命名空间。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |