2015-01-21 299 views
0

在搜索Web時,我遇到了許多在XML文件中使用名稱空間的例子。他們大多有這樣的形式:使用XML名稱空間

<d:student xmlns:d='http://www.develop.com/student'> 
    <d:id>3235329</d:id> 
    <d:name>Jeff Smith</d:name> 
    <d:language>C#</d:language> 
    <d:rating>9.5</d:rating> 
</d:student> 

(從https://msdn.microsoft.com/en-us/magazine/cc302166.aspx採取這個例子)

這條線:

<d:student xmlns:d='http://www.develop.com/student'> 

麻煩我,幾乎因爲每一個例子看起來是這樣的。它可以有

<student xmlns:d='http://www.develop.com/student'> 

所以在這裏我聲明由同一個URI標識相同的命名空間形式,但我不希望節點,在申報是有命名空間。這是對的嗎?長話短說:just xmlns:d='http://www.develop.com/student'命名空間的有效聲明是d:

回答

1

xmlns:d='http://www.develop.com/student'將聲明該元素及其所有後代的d命名空間。

如果標籤名稱上缺少d:,則不會使該元素來自該名稱空間。這仍然會使用默認的命名空間。

<foo xmlns="http://example.com/1"> 
    <bar xmlns:x="http://example.com/2"> 
     <x:baz /> 
    </bar> 
</foo> 

foo來自/1bar來自/1baz來自/2

0

d不是命名空間,而是它的別名(可用作前綴)。命名空間仍然是http://www.develop.com/student

<d:student xmlns:d='http://www.develop.com/student'/>可以被解讀爲{http://www.develop.com/student}:student

可以使用xmlns屬性爲沒有前綴的元素定義默認名稱空間。所以<student xmlns='http://www.develop.com/student'/>也可以看作{http://www.develop.com/student}:student

DOM實際上將名稱空間和本地名稱保存在節點對象的不同屬性中。 {namespace}:localname語法通常用於調試輸出。

namspace定義對於定義在其上的元素節點及其所有後代(除非它在後代中被覆蓋)始終有效。

屬性節點不使用默認名稱空間定義。沒有前綴的屬性總是在「空」名稱空間中。

這是一個不使用前綴的例子。

<student xmlns="http://www.develop.com/student"> 
    <id>3235329</id> 
    <name>Jeff Smith</name> 
    <description type="xhtml"> 
    <div xmlns="http://www.w3.org/1999/xhtml/"> 
     ... 
    </div> 
    </description> 
</student> 

該示例中的節點名(與解析名稱空間)爲:

  • {http://www.develop.com/student}:student
  • {http://www.develop.com/student}:id
  • {http://www.develop.com/student}:name
  • {}:type
  • {http://www.w3.org/1999/xhtml/}:div