一、xml類和xmllist類的區別
as3.0中,處理xml主要用到兩個主類,xml類和xmllist類,這兩個類的很多內容是共通的。應該有人會問,xml和xmllist的區別是什麼?
xml:表示單個的 xml元素。也就是說,該xml元素中,只有乙個最頂級的標籤,但可以包含其他子標籤。
xmllist:表示一組的xml元素。也就是說,該xml元素中,存在多個同級別的頂級標籤。當然每個標籤也可以包含其他子標籤。
呃,這個定義是我自己下的,能理解不?我舉例說明吧。
示例1:xml元素,只包含乙個標籤,同時也是頂級標籤
黑桃
示例2:xml元素,包含多個標籤,但只有1個頂級標籤黑桃
決鬥 示例3:xmllist元素,擁有2個同級的頂級標籤黑桃
決鬥 有些時候,某些類的方法返回的是xmllist物件,但該xmllist物件只包含乙個xml元素,如上篇中最後一例中的myxml.root.(@id == 2).cardname。那麼此時,該xmllist物件將被視為xml物件。
二、xml的四則運算
四則運算,這個詞熟吧,好懷念的讀書時代。好吧,跑題了!
可以對xml進行一些常規運算,這些運算方式由於形式簡單,因此非常實用。
(1) = 號運算
var myxml:xml =黑桃
我們先加入語句:
myxml.cardcolor = "梅花";
trace(myxml.toxmlstring());
返回:梅花
我們接著加入語句:
myxml.cardname = "決鬥"
myxml.@id = 1;
trace(myxml.toxmlstring());
返回:梅花 決鬥
(2) + 法運算
var x1:xml = test1
var x2:xml =test2
var xlist:xmllist = x1 + x2;
trace(xlist.toxmlstring());
返回:test1
test2
注意:xlist的資料型別為xmllist,如果是xml會報錯哦!
(3) 括號運算
示例:var myxml:xml =黑桃
決鬥 黑桃
雌雄雙股劍
請參看和比較以下表示式:
a、myxml.root.(cardcolor == "黑桃").cardname
由於符合該條件的物件有2個,所以返回結果是乙個xmllist物件:決鬥
雌雄雙股劍
b、myxml.root.(@id == 1).cardname
由於符合該條件的物件只有1個,雖然是xmllist物件,但視為xml,所以返回:
決鬥c、過濾條件不僅限於等於,例如,下面的表達是也是合法的:
myxml.root.(@id >= 1).cardname
當使用以上括號運算時,需要特別注意,xml物件的結構需要保持一致。不然如果引用到不一致的部分作為判斷,會產生報錯!
三、xml類、xmllist類常用方法
其實,這兩個類真的很接近,汗!下面的講解中,我需要用到下面這個xml示例:
示例:var myxml:xml =黑桃
決鬥 黑桃
雌雄雙股劍
(1) tostring() 和 toxmlstring()
若xml元素包含複雜元素,兩者功能相同。
若xml元素只包含簡單內容,兩者有區別。tostring()只包含內容,toxmlstring()包含標籤。
如示例中,
trace(myxml.root[0].tostring())
trace(myxml.root[0].toxmlstring())
兩者返回內容相同。
trace(myxml.root[0].cardcolor.tostring()) //返回:黑桃
trace(myxml.root[0].cardcolor.toxmlstring()) //返回:黑桃
兩者返回內容不同。
(2) attribute()、attributes()
在示例中:
myxml.root[0].@id
myxml.root[0].attribute("id")
這兩個是等值的
trace(myxml.root[0].@*)
trace(myxml.root[0].attributes())
這兩個也是等值的
所以,一般情況下,盡量使用@符號來訪問屬性比較好。
只有以下這種情況例外。大家注意看,示例中,第乙個標籤有id屬性,而第二個沒有,然後我們使用上面講的括號來過濾時:
第一種方法:
trace(myxml.root.(@id >= 1).cardname);
結果:報錯!因為xml結構不完全一致。
第二種方法:
trace(myxml.root.(attribute("id") >= 1).cardname);
結果:沒有報錯!說明用該方法可以去除不一致的xml結構。
(3) child()、children()、elements()
在示例中:
trace(myxml.root[0]);
trace(myxml.child("root")[0]);
這兩者是等值的。
但一般,使用child的用處,還是為了迴圈遍歷。用下面的語句,可以獲得子項的數目。
myxml.child("root").length();
但比較尷尬的是,如果只是為了這個目的,也可以用下面的語句等值實現:
myxml.children().length();
但上面的兩個方法,返回的數量都是所有元素的數量,比如下面的例子:
var xml:xml =
text
;trace(xml.children().length()); //返回:3
如果只要返回具有標籤的元素,那麼需要用到elements()方法。
trace(xml.elements().length()); //返回:2
對三者功能做個總結:
child():返回指定的某個子元素
children():返回子元素的列表
elements():返回具有標籤的子元素的列表
(4) 刪除xml節點
e4x規範中,定義有delete和deletebyindex方法,用來刪除特定的xml節點。但是在as3.0中,並沒有這兩個方法。甚至在幫助文件中,也沒有提及如何刪除乙個xml節點。真不負責任啊!!!
不過,其實是可以實現的,用delete方法。
如示例,我們要刪除第二個節點,可以用以下語句:
delete myxml.root[1];
用setchildren()方法,可以重寫xml節點,但是會把當前的xml節點全部清除。例如:
myxml.setchildren(test);
trace(myxml.toxmlstring());
返回:test
但是setchildren()方法是必須帶引數的,不然倒也是乙個刪除節點的方法。
還有乙個replace()方法,也是用於替換的,並且可以指定要替換的內容,我這裡不做介紹了,有興趣的朋友可以參考幫助。
Hashtable和HashMap類的區別
下面再轉一篇關於兩個類的區別,比較簡單的過一下 最近同學找工作,經常被問到這個問題rt,所以。hashtable的應用非常廣泛,hashmap是新框架中用來代替hashtable的類,也就是說建議使用hashmap,不要使用hashtable。這裡簡單分析他們的區別。1.hashtable的方法是同...
XML 和 List 互轉類
xml 和 list 互轉類 using system using system.collections.generic using system.linq using system.text using system.xml namespace xmlhelper 物件例項集轉成xml 物件例項集...
操作XML的類
net framework提供了許多命名空間和類,使xml的讀取 處理和寫入非常簡單。介紹幾個易於操作xml的類。1 xmldocument類 using system.xml xmldocument document new xmldocument document.load xmlpath 2 ...