LINQ學習筆記 XML命名空間

2021-05-23 23:46:57 字數 1588 閱讀 4351

xml命名空間主要完成兩件事情. 首先, 與c#的命名空間一樣, 它們可以幫助避免命名衝突. 當你要合併來自兩個不同xml檔案的時候這可能會成為乙個問題. 其次, 命名空間賦予了名稱乙個絕對的意義.

名稱與命名空間

與.net型別可以擁有命名空間一樣, xml元素和屬性也同樣可以擁有命名空間.

xml命名空間主要完成兩件事情. 首先, 與c#的命名空間一樣, 它們可以幫助避免命名衝突. 當你要合併來自兩個不同xml檔案的時候這可能會成為乙個問題. 其次, 命名空間賦予了名稱乙個絕對的意義. 例如, 名稱」nil」 可以代表任何意思, 然而, 如果和http://www.w3.org/2001/xmlschema-instance命名空間一起, 「nil」表示類似於c#當中null的意思, 並且有特定的規則指示其如何被應用.

xml的命名空間是使用xmlns屬性來定義的:

xmlns是乙個特殊的保留屬性. 當我們這樣使用時, 它主要執行兩個功能:

我們也可以使用乙個字首(prefix)指定命名空間——這可以用來避免重複.主要有兩個步驟——定義字首和使用字首. 我們也可以類似下面的做法將它們同時定義:

兩件不同的事情在這裡產生. 在右邊, xmlns:nut=」…」定義了乙個字首叫做nut並使其對於元素本身以及它所有的後代元素都是可用的. 在左邊, nut:customer應用了最新定義的字首到customer元素上.

乙個被定義了字首的元素不會為它的後代元素定義預設的命名空間. 在下面的xml片段中, firstname包含乙個空的命名空間:

為了將oreilly.nutshell.csharp的字首給予firstname, 我們必須使用下面的做法:

我們也可以將命名空間賦值到屬性上, 不同之處在於它總是要求乙個字首. 例如:

另乙個不同之處在於乙個未經修飾的屬性總是包含乙個空的命名空間: 其永遠不會從父元素繼承乙個預設的命名空間.

在x-dom當中指定命名空間

有幾種辦法可以用來指定xml的命名空間. 首先是將其包括在local name之前的乙個大括號裡面, 如:

輸出的結果為:

第二種做法是使用xnamespace和xname, 以下是它們的定義:

所有的型別定義都是使用string的隱式轉換, 因此下面的**是合法的

xname還提供了+操作符的過載, 允許你在沒有使用大括號的情況下將命名空間和名稱組合在一起.

所有在x-dom當中定義的可以元素或者屬性名的構造器和方法時間上都是接受乙個xname物件而不是字串. 原因就是我們上面例子使用的方法——string的隱式轉換.

指定乙個命名空間到元素或者屬性也是一樣的:

x-dom與預設命名空間

x-dom會一直忽略預設命名空間的觀念指導它被輸出成了xml. 這意味著當你構建乙個子xelement, 如果需要的話你必須顯式給予它乙個命名空間: 因為它不會從父親元素那裡繼承:

字首

x-dom對待字首就像它對待命名空間一樣, 主要也是為了序列化功能. 這意味著你可以選擇完全忽略字首——這是可行的. 唯一的理由是為了輸出xml檔案時更加有效. 例如, 考慮如下**:

輸出結果:

XML 命名空間

xml 命名空間提供了一種避免元素命名衝突的方法。因為xml文件中使用的元素不是固定的,那麼兩個不同的xml文件使用同乙個名字來描述不同型別的元素的情況就可能發生。而這種情況又往往會導致命名衝突。請看下面兩個例子 這個 xml 文件在table元素中攜帶了水果的資訊 bananas 這個 xml 文...

XML 命名空間

xml 命名空間 xml 命名空間提供了一種避免元素命名衝突的方法。命名衝突 因為xml文件中使用的元素不是固定的,那麼兩個不同的xml文件使用同乙個名字來描述不同型別的元素的情況就可能發生。而這種情況又往往會導致命名衝突。請看下面兩個例子 這個 xml 文件在table元素中攜帶了水果的資訊 ba...

xml命名空間

xml命名空間 這個理解起來總感覺有些抽象,不太好懂,自己學的也是一知半解,但是感覺它的存在卻是很不同凡響的,在xml的應用中,給我們帶來了很多方便,也讓xml的功能得到了很大的提公升,自己感覺的,呵呵,有說的不對的地方,不要見笑喲 在進入正題之前,我們先引用乙個例子 bananas 在上面這個xm...