2013-05-03 51 views
0

我在玩XMPP,因此了解XML。这里是从XMPP文档检索所有注册用户的一种元素的例子:为什么没有与此xmlns关联的前缀?

<iq from='[email protected]/globe' 
     id='get-registered-users-num-1' 
     to='shakespeare.lit' 
     type='set' 
     xml:lang='en'> 
     <command xmlns='http://jabber.org/protocol/commands' 
       action='execute' 
       node='http://jabber.org/protocol/admin#get-registered-users-num'/> 
    </iq> 

为什么会出现的xmlns命名空间之前没有前缀的?为什么不:

<command xmlns=get_users:'http://jabber.org/protocol/commands' 
       action='execute' 
       node='http://jabber.org/protocol/admin#get-registered-users-num'/> 

这是否意味着它的定义仅此一个子元素<command>命名空间?如果是这样,那为什么呢?

回答

0

这就是所谓的“默认”命名空间。它本质上,前缀的元素,现声明与该命名空间(在这种情况下是http://jabber.org/protocol/commands)的所有属性(和元素),使得它等价于:

<command xmlns:default_namespace="http://jabber.org/protocol/commands" 
     default_namespace:action="execute" 
     default_namespace:node="http://jabber.org/protocol/admin#get-registered-users-num" /> 

如果你有孩子该节点也会自动为其自动添加前缀相同的默认名称空间(除非它们本身具有不同的默认名称空间)。

如果您只处理一个名称空间,这非常方便,但如果您处理多个名称空间,事情可能会非常快速地失控。

xPath有时也会有默认命名空间的问题,所以如果您使用它解析XML,请注意!

+0

Gotcha。我完全忽略了w3schools中的这一行,我正在阅读并重新阅读它:'为元素定义默认命名空间使我们不必在所有子元素中使用前缀。'谢谢。 – Ramsel 2013-05-03 00:54:06

相关问题