0

我正在使用 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>?如果是这样,为什么要这样做?

4

1 回答 1

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,请当心!

于 2013-05-03T00:28:21.307 回答