我正在玩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>
定义命名空间?如果是这样,为什么这样做?
答案 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,请注意!