为什么没有与此xmlns相关联的前缀?

时间:2013-05-03 00:12:24

标签: xml

我正在玩XMPP,因此学习XML。以下是从XMPP文档中检索所有注册用户的元素示例:

 <iq from='bard@shakespeare.lit/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>定义命名空间?如果是这样,为什么这样做?

1 个答案:

答案 0 :(得分: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,请注意!