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

为什么没有与此xmlns关联的前缀?,xml,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

我正在使用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'/>


这是否意味着它只为这个单子元素定义名称空间?如果是,为什么要这样做?

这就是所谓的“默认”命名空间。从本质上讲,它在它声明的元素的所有属性(和元素)前面加上该名称空间(在本例中为
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,请小心

明白了。我完全跳过了我正在阅读的W3tut中的这一行,只是重新阅读了它:“为一个元素定义一个默认名称空间可以避免我们在所有子元素中使用前缀。”谢谢。