2013-05-03 52 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

相關問題