日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【转载】 详细介绍Flex中操作XML

發布時間:2023/12/18 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】 详细介绍Flex中操作XML 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一? 在介紹Flex中操作XML之前,首先簡單介紹下XML中的基本術語。????

元素:XML中擁有開始標簽和結束標簽的這一塊稱為“元素”????
節點:把XML元素與文本結合起來統稱為節點????
根節點:位于整個XML文當頂端的節點????
文本節點:包含文本的節點????
屬性:元素的組成部分,以鍵/值形式放在元素標簽內??

?

用一個例子來說明

view plain
  • <root_node><!--這是一個根節點也是一個元素-->???????????
  • <node?attribute="value"><!--這是一個節點也是一個元素,其中包含有屬性"attribute"-->????????????
  • text?node<!--這是一個文本節點-->????????????
  • </node>?????????????
  • </root_node>????????????
  • XML簡單介紹完了;之后,將分別介紹XML對象的創建,XML對象的處理以及XML對象的運用。

    ?

    二? Flex中創建XML對象

    Flex中創建XML對象的方法有很多種,可以根據該XML對象的用途來決定使用哪種方法

    1.創建一個XML對象,直接把XML文本賦給這個對象

    view plain
  • var?textXmlObj:XML?=?<test><element>text</element></test>;??
  • 注意:這里等號右邊的表達式不用加上引號,因為AS認識它,知道它是一個XML,如果加上引號就成了String類型了,編譯也無法通過。

    當然也可以動態的決定XML文本中的內容,用"{變量}"的方式插入到XML文本中。

    view plain
  • var?text_node:String?=?"text";??
  • var?textXmlObj:XML?=?<test><element>{text_node}</element></test>;??
  • ?

    2.創建一個XML對象,并在構造方法中傳入字符串作為XML文本

    我們平時在編程工作中,往往會以字符串的方式得到一個XML文本,這個時候就可以使用XML的構造方法來創建一個XML對象。

    view plain
  • var?myText:String?=?"text";??
  • var?str:String?=?"<test><element>"+?myText?+?"</element></test>";??
  • var?textXmlObj:XML?=?new?XML(str);??
  • ?

    3.從外部加載XML對象

    對于比較大一點的XML文本來說,從外部加載無疑是最好的方式了,因為如果硬寫在程序中,就算是對XML對象進行最簡單的修改都是一個大災難。

    外部加載這里介紹2種方式

    1)如果你不是在Flex中開發而只是在比如Flash CS3中開發的話,可以使用下面的這種方法來加載外部XML

    view plain
  • import?flash.events.Event;????????????
  • import?flash.net.URLLoader;???????????
  • import?flash.net.URLRequest;??????????????
  • ??????????????
  • var?externalXML:XML;??????????????
  • var?loader:URLLoader?=?new?URLLoader();???????????
  • var?request:URLRequest?=?new?URLRequest("xmlFile.xml");???????????
  • loader.load(request);?????????????
  • loader.addEventListener(Event.COMPLETE,?onComplete);??????????????
  • ??????????????
  • function?onComplete(event:Event):void?????????????
  • {?????????????
  • ????var?loader:URLLoader?=?event.target?as?URLLoader;??????????????
  • ????if?(loader?!=?null)????????????
  • ????{??????????????
  • ????????externalXML?=?new?XML(loader.data);????????????
  • ????????trace(externalXML.toXMLString());??????????????
  • ????}??????????????
  • ????else???????????
  • ????{??????????????
  • ????????trace("loader?is?not?a?URLLoader!");???????????
  • ????}??????????????
  • }?????????????
  • ?

    2) 如果是在Flex開發環境中就可以使用HttpService來加載外部的XML;如果這里看不懂代碼沒關系,后面將細致的介紹下面的這種處理方式

    view plain
  • <?xml?version="1.0"?encoding="utf-8"?>??????????????????????????????????
  • <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"????????????????????????????????
  • ????creationComplete="unitRPC.send()">?????????????????????????????
  • ??????????????????????????????????
  • ????<mx:HTTPService?id="unitRPC"???????????????????????????????????
  • ????????url="xmlFile.xml"?????????????????????????????
  • ????????????result="unitRPCResult(event)"/>????????????????????????????
  • ??????????????????????????????????????????
  • ????<mx:Script>?????????????????????????????????
  • ????????<!--[CDATA[????????????????????????????
  • ????????????import?mx.rpc.events.ResultEvent;?????????????????????????
  • ????????????private?function?unitRPCResult(event:ResultEvent):void?{??????????????????????????
  • ??????????????????????????????????????
  • ????????????}?????????????????????????
  • ????????]]-->??????????????????????????????
  • ????</mx:Script>????????????????????????????????
  • </mx:Application>???????????????????????????????
  • ?

    ?

    三 對XML對象進行處理

    在介紹XML對象的處理之前,介紹一個擴展語言"E4X",E4X大大簡化了傳統對XML的操作方式(如DOM接口)。

    你會發現在程序中E4X操作XML是如此的簡單,懶人們都樂壞了。

    這里先給出一個XML對象,后面都將對這個對象進行操作

    view plain
  • var?myXML:XML?=???????????
  • <books>?????????????
  • ??<book?name="flex?tutorial">??????????????
  • ????<price>30</price>??????????????
  • ????<author>adobe</author>?????????????
  • ??</book>??????????????
  • ??<book?name="sliverlight?tutorial">???????????
  • ????<price>40</price>??????????????
  • ????<author>microsoft</author>?????????????
  • ??</book>??????????????
  • ??<book?name="java?tutorial">??????????????
  • ????<price>50</price>??????????????
  • ????<author>sun</author>???????????
  • ??</book>??????????????
  • ??<author>cyeric</author>?//這是沒有意義的一個節點,只是為了后面的演示???
  • </books>????????????
  • ?

    1)查詢???
    使用"."操作符查詢節點,使用"[]"訪問指定索引的節點???

    view plain
  • trace(myXML.book[0])?;?????
  • 輸出???
    <book name="flex tutorial">???
    ? <price>30</price>???
    ? <author>adobe</author>???
    </book>???
    輸出內容說明,得到了第一個子節點;另外,如果我們想查詢所有book節點的話只需要把[0]去掉就可以了。??

    ?

    使用".."操作符訪問所有以該標簽命名的節點,而忽略節點的上下關系,注意最后那個節點

    view plain
  • trace(myXML..author);??
  • 輸出
    <author>adobe</author>
    <author>microsoft</author>
    <author>sun</author>
    <author>cyeric</author>

    可以看到,不管author位于哪個位置,都打印了出來

    ?

    使用"@"操作符訪問節點屬性

    view plain
  • trace(myXML.book[0].@name)??
  • 輸出
    flex tutorial
    第一個子節點的name屬性就被打印了出來
    以上這4個操作符號".","[]","..","@" 即為最常用的4個E4X操作符,簡單吧,下面就循序漸進。

    ?

    在查詢過程中可以使用E4X的過濾功能,假如我現在只想查詢價格在50塊以下的書,我們可以這樣

    view plain
  • trace(myXML.book.(price<50));??
  • 輸出
    <book name="flex tutorial">
    ? <price>30</price>
    ? <author>adobe</author>
    </book>
    <book name="sliverlight tutorial">
    ? <price>40</price>
    ? <author>microsoft</author>
    </book>
    價格為50元的那本書就沒有打印出來了。


    屬性也可以過濾

    view plain
  • trace(myXML.book.(@name=='flex?tutorial'));??
  • 輸出
    <book name="flex tutorial">
    ? <price>30</price>
    ? <author>adobe</author>
    </book>

    ?

    我們還可以把查詢到的XML文本給改了,比如書店要把書都處理掉,然后叫賣:"5元5元一律5元"。

    view plain
  • trace(myXML.book.(price=5));??
  • 輸出
    <book name="flex tutorial">
    ? <price>5</price>
    ? <author>adobe</author>
    </book>
    <book name="sliverlight tutorial">
    ? <price>5</price>
    ? <author>microsoft</author>
    </book>
    <book name="java tutorial">
    ? <price>5</price>???
    ? <author>sun</author>???
    </book>???

    ?

    2) 修改,修改XML對象包括修改,添加和刪除操作???
    雖然在介紹查詢的時候介紹過可以在查詢到XML文本的時候把它的內容給修改了。???
    ???
    這里先給出一個XML對象,后面都將對這個對象進行操作???

    view plain
  • var?myXML:XML?=?????
  • <books>?????
  • ??<book?name="flex?tutorial">?????
  • ????<price>30</price>?????
  • ????<author>adobe</author>?????
  • ??</book>?????
  • </books>?????
  • ?

    添加元素/節點,使用insertChildBefore和insertChildAfter方法在某一位置添加元素/節點,appendChild和prependChild方法在最前和最后添加元素/節點?

    view plain
  • myXML.insertChildAfter(myXML.book[0],<newbook?name="After"/>);???
  • myXML.insertChildBefore(myXML.book[0],<newbook?name="Before"/>);???
  • myXML.appendChild(<newbook?name="Append"/>);???
  • myXML.prependChild(<newbook?name="Prepend"/>);???
  • trace(myXML);???

  • 輸出?
    <books>?
    ? <newbook name="Prepend"/>?
    ? <newbook name="Before"/>?
    ? <book name="flex tutorial">?
    ??? <price>30</price>?
    ??? <author>adobe</author>?
    ? </book>?
    ? <newbook name="After"/>?
    ? <newbook name="Append"/>?
    </books>?
    在第一個元素的前后各添加了一個元素?

    ?

    添加屬性,直接使用E4X帶來的便利?

    view plain
  • myXML.book[0].@date="2008";???
  • trace(myXML);???

  • 輸出?
    <books>?
    ? <book name="flex tutorial" date="2008">?
    ??? <price>30</price>?
    ??? <author>adobe</author>?
    ? </book>?
    </books>?

    ?

    修改XML對象?

    view plain
  • myXML.book[0].author="奧多比";???
  • trace(myXML);?????
  • <books>???
    ? <book name="flex tutorial">???
    ??? <price>30</price>???
    ??? <author>奧多比</author>???
    ? </book>???
    </books>???
    也很簡單,修改屬性的方法也是一樣???

    ?

    刪除元素節點,屬性等,使用delete關鍵字???

    view plain
  • delete?myXML.book[0].@name;?????
  • delete?myXML.book[0].author;?????
  • delete?myXML.book[0].price.text()[0];?????
  • trace(myXML);?????
  • 輸出???
    <books>???
    ? <book>?????
    ??? <price/>?????
    ? </book>?????
    </books>?????

    ?

    ?

    四 在Flex中使用XML的例子

    大的XML文檔用來顯示數據或者顯示列表的情況比較多,比如顯示數據時作為Datagrid的數據源,或者為List,Combobox,Tree等的顯示列表。

    ?

    當我們使用List或者Combobox的時候,往往會把XML對象轉換為ArrayCollection對象,看下面的例子

    外部Xml文件?

    view plain
  • <books>?????????????????????
  • ????<book?name="flex?tutorial">?????????????????
  • ????????<price>30</price>?????????????
  • ????????<author>adobe</author>????????????
  • ????</book>?????????????????
  • ????<book?name="air?tutorial">??????????????????
  • ????????<price>40</price>?????????????
  • ????????<author>adobe</author>????????????
  • ????</book>?????????????????
  • ????<book?name="java?tutorial">?????????????????
  • ????????<price>50</price>?????????????
  • ????????<author>sun</author>??????????????
  • ????</book>?????????????????
  • </books>????????????????????
  • Flex文件

    view plain
  • <?xml?version="1.0"?encoding="utf-8"?>??????????????????
  • <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"??????????????????
  • ?layout="absolute"????????????????
  • ?creationComplete="init()">????????????????
  • ??<mx:Script>???????????????
  • ??<!--[CDATA[??????????????????
  • ??????import?mx.collections.ArrayCollection;??????????????????
  • ??????import?mx.rpc.events.ResultEvent;???????????????
  • ??????//用于數據綁定的ArrayCollection????????????????
  • ??????[Bindable]private?var?externalData:ArrayCollection?=?new?ArrayCollection();?????????????????
  • ??????????????????????
  • ??????private?function?init():void?{??????????????????
  • ??????????//發送請求??????????????????
  • ??????????myService.send();???????????????
  • ??????}???????????????
  • ??????????????????????????
  • ??????private?function?resultHandler(event:ResultEvent):void?{????????????????
  • ??????????//取得Xml對象中book節點的集合?????????????????
  • ??????????externalData?=?event.result.books.book;?????????????????
  • ??????}//斷點處??????????????????
  • ??]]-->????????????????
  • ??</mx:Script>??????????????????
  • ??<!--創建Httpservice對象加載外部Xml-->?????????????????
  • ??<mx:HTTPService?id="myService"???????????????
  • ??????url="xmlFile.xml"???????????????
  • ??????result="resultHandler(event)"/>??????????????????
  • ??<!--用于顯示的list-->??????????????????
  • ??<mx:List?id="datalist"?dataProvider="{externalData}"?labelField="name"/>??????????????????????????
  • </mx:Application>???????????????
  • 將上面的代碼以debug模式執行,程序停在斷點處,在variables視圖中我們可以很清晰的看到程序HttpService對象在加載外部XML后已經把它轉換成了ArrayCollection對象,如下圖。這樣就可以很輕松的將數據源綁定到顯示列表對象List中。

    ?

    ?

    另外一種情況,當我們使用Tree組件的時候,需要在HTTPService對象中加上resultFormat="e4x"以XML的格式讀取進來而不要轉換為ArrayCollection。

    外部XML文件

    view plain
  • <books>?????
  • <category?name="RIA">???
  • ????<book?name="flex?tutorial"?price="30"?author="adobe">??
  • ????</book>?????
  • ????<book?name="air?tutorial"?price="40"?author="adobe">????
  • ????</book>?????
  • </category>?????????
  • <category?name="Java">??????????
  • ????<book?name="java?tutorial"?price="50"?author="sun">?????
  • ????</book>?????
  • </category>?????????
  • </books>????????
  • Flex文件

    view plain
  • <?xml?version="1.0"?encoding="utf-8"?>??????????????
  • <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"??????????????
  • ?layout="absolute"????????????
  • ?creationComplete="myService.send()">??????????????
  • ??<mx:HTTPService?id="myService"???????????
  • ????url="xmlFile.xml"?????????
  • ????resultFormat="e4x"/>???????
  • ??????????????
  • <mx:XMLListCollection?id="booktreesrc"?????????????
  • ????source="{myService.lastResult.category}"/>?????????
  • ??????????????
  • <mx:Tree?id="bookTree"?????????????
  • ????height="100%"?????????
  • ????dataProvider="{booktreesrc}"??????????
  • ????labelField="@name"/>???????
  • ??????????????????????
  • </mx:Application>???????????
  • 畫面顯示

    轉載于:https://www.cnblogs.com/chengying/archive/2011/08/11/chengying.html

    總結

    以上是生活随笔為你收集整理的【转载】 详细介绍Flex中操作XML的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。