詳細介紹Flex中操作XML (轉)
一 在介紹Flex中操作XML之前,首先簡單介紹下XML中的基本術語。
元素:XML中擁有開始標籤和結束標籤的這一塊稱為“元素”
節點:把XML元素與文字結合起來統稱為節點
根節點:位於整個XML文當頂端的節點
文字節點:包含文字的節點
屬性:元素的組成部分,以鍵/值形式放在元素標籤內
用一個例子來說明
- <root_node><!--這是一個根節點也是一個元素-->
- <nodeattribute="value"><!--這是一個節點也是一個元素,其中包含有屬性"attribute"-->
-
text node
- </node>
- </root_node>
<root_node><!--這是一個根節點也是一個元素--> <node attribute="value"><!--這是一個節點也是一個元素,其中包含有屬性"attribute"--> text node<!--這是一個文字節點--> </node> </root_node>
XML簡單介紹完了;之後,將分別介紹XML物件的建立,XML物件的處理以及XML物件的運用。
二 Flex中建立XML物件
Flex中建立XML物件的方法有很多種,可以根據該XML物件的用途來決定使用哪種方法
1.建立一個XML物件,直接把XML文字賦給這個物件
- var textXmlObj:XML = <test><element>text</element></test>;
var textXmlObj:XML = <test><element>text</element></test>;
注意:這裡等號右邊的表示式不用加上引號,因為AS認識它,知道它是一個XML,如果加上引號就成了String型別了,編譯也無法通過。
當然也可以動態的決定XML文字中的內容,用"{變數}"的方式插入到XML文字中。
- var text_node:String = "text";
- var textXmlObj:XML = <test><element>{text_node}</element></test>;
var text_node:String = "text"; var textXmlObj:XML = <test><element>{text_node}</element></test>;
2.建立一個XML物件,並在構造方法中傳入字串作為XML文字
我們平時在程式設計工作中,往往會以字串的方式得到一個XML文字,這個時候就可以使用XML的構造方法來建立一個XML物件。
- var myText:String = "text";
- var str:String = "<test><element>"+ myText + "</element></test>";
- var textXmlObj:XML = new XML(str);
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
- 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!");
- }
- }
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;如果這裡看不懂程式碼沒關係,後面將細緻的介紹下面的這種處理方式
- <?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;
- privatefunction unitRPCResult(event:ResultEvent):void {
- }
- ]]-->
- </mx:Script>
- </mx:Application>
<?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物件,後面都將對這個物件進行操作
- 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>
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)查詢
使用"."操作符查詢節點,使用"[]"訪問指定索引的節點
trace(myXML.book[0]) ;
輸出
<book name="flex tutorial">
<price>30</price>
<author>adobe</author>
</book>
輸出內容說明,得到了第一個子節點;另外,如果我們想查詢所有book節點的話只需要把[0]去掉就可以了。
使用".."操作符訪問所有以該標籤命名的節點,而忽略節點的上下關係,注意最後那個節點
trace(myXML..author);
輸出
<author>adobe</author>
<author>microsoft</author>
<author>sun</author>
<author>cyeric</author>
可以看到,不管author位於哪個位置,都列印了出來
使用"@"操作符訪問節點屬性
trace(myXML.book[0][email protected])
輸出
flex tutorial
第一個子節點的name屬性就被列印了出來
以上這4個操作符號".","[]","..","@" 即為最常用的4個E4X操作符,簡單吧,下面就循序漸進。
在查詢過程中可以使用E4X的過濾功能,假如我現在只想查詢價格在50塊以下的書,我們可以這樣
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元的那本書就沒有打印出來了。
屬性也可以過濾
- trace(myXML.book.(@name=='flex tutorial'));
trace(myXML.book.(@name=='flex tutorial'));
輸出
<book name="flex tutorial">
<price>30</price>
<author>adobe</author>
</book>
我們還可以把查詢到的XML文字給改了,比如書店要把書都處理掉,然後叫賣:"5元5元一律5元"。
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物件,後面都將對這個物件進行操作
- var myXML:XML =
- <books>
- <bookname="flex tutorial">
- <price>30</price>
- <author>adobe</author>
- </book>
- </books>
var myXML:XML = <books> <book name="flex tutorial"> <price>30</price> <author>adobe</author> </book> </books>
新增元素/節點,使用insertChildBefore和insertChildAfter方法在某一位置新增元素/節點,appendChild和prependChild方法在最前和最後新增元素/節點
- 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);
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帶來的便利
- myXML.book[0][email protected]="2008";
- trace(myXML);
myXML.book[0][email protected]="2008";
trace(myXML);
輸出
<books>
<book name="flex tutorial" date="2008">
<price>30</price>
<author>adobe</author>
</book>
</books>
修改XML物件
- myXML.book[0].author="奧多比";
- trace(myXML);
myXML.book[0].author="奧多比"; trace(myXML);
<books>
<book name="flex tutorial">
<price>30</price>
<author>奧多比</author>
</book>
</books>
也很簡單,修改屬性的方法也是一樣
刪除元素節點,屬性等,使用delete關鍵字
- delete myXML.book[0][email protected];
- delete myXML.book[0].author;
- delete myXML.book[0].price.text()[0];
- trace(myXML);
delete myXML.book[0][email protected]; 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檔案
- <books>
- <bookname="flex tutorial">
- <price>30</price>
- <author>adobe</author>
- </book>
- <bookname="air tutorial">
- <price>40</price>
- <author>adobe</author>
- </book>
- <bookname="java tutorial">
- <price>50</price>
- <author>sun</author>
- </book>
- </books>
<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檔案
- <?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]privatevar externalData:ArrayCollection = new ArrayCollection();
- privatefunction init():void {
- //傳送請求
- myService.send();
- }
- privatefunction 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>
<?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檔案
- <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>
<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檔案
- <?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>
<?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>
畫面顯示
另外,在指定元素前和後插入,在最前端和尾端插入
var example:XML = <person/>;
example.two = "";
example.insertChildBefore(example.two, <one/>); //在two節點前插入one節點
example.insertChildBefore(example.two, "在two節點前插入文字");
example.insertChildAfter(example.two, <three/>); //在two節點後插入three節點
example.prependChild(<start/>); //在最頂端插入start節點
example.appendChild(<end/>); //在尾端插入end節點
example.start = "start內容"; //向節點增加內容
trace(example);
/*
輸出:
<person>
<start>start內容</start>
<one/>
在two節點前插入文字
<two/>
<three/>
<end/>
</person>
*/
相關推薦
詳細介紹Flex中操作XML (轉)
一 在介紹Flex中操作XML之前,首先簡單介紹下XML中的基本術語。 元素:XML中擁有開始標籤和結束標籤的這一塊稱為“元素” 節點:把XML元素與文字結合起來統稱為節點 根節點:位於整個XML文當頂端的節點 文字節點:包含文字的節點 屬性:元素的組成部分,以鍵/值形式放
Linux中常用操作命令(轉)
備份 並不會 使用方法 nts 系統 版本 不定 vim常用 相同 1、cd命令 這是一個非常基本,也是大家經常需要使用的命令,它用於切換當前目錄,它的參數是要切換到的目錄的路徑,可以是絕對路徑,也可以是相對路徑。如: [plain] view plain
取自ACE中的bit操作宏(轉)
查看 disable amp work .cpp log get lin 影響 1 # define ACE_BIT_ENABLED(WORD, BIT) (((WORD) & (BIT)) != 0 ) 2 # define ACE_BIT_DISAB
理解並使用.NET 4.5中的HttpClient(轉)
nts 定制 creat exit sta ogg 服務器 nal view 原文地址:http://www.cnblogs.com/wywnet/p/httpclient.html HttpClient介紹HttpClient是.NET4.5引入的一個HTTP客戶端庫,
Python語言在人工智能(AI)中的優勢 (轉)
巴西 luci ant p s 天使 不惜 ray 這也 招聘網站 本文探討了Python語言在AI領域的優勢與運用。 誰會成為AI 和大數據時代的第一開發語言? 這本已是一個不需要爭論的問題。如果說三年前,Matlab、Scala、R、Java 和 python還各有機
eclipse中使用Lombok(轉)
clip .net ubun class 添加 code pan otc soft 原文鏈接:https://www.cnblogs.com/justuntil/p/7120534.html windows環境 1.下載lombok.jar包https://projec
新唐ISP操作步驟(轉)
too 模式 usb 連線 com In 點擊 代碼下載 art 1,電腦上裝上“NuMicro_ICP_Programming_Tool_v1.18.5320.zip”;2,把目標板通過SWD口的NU-LINK連接到電腦的USB口上;3,打開桌面的“NuMicro ICP
Git介紹及常用操作演示(一)--技術流ken
Git介紹及常用操作演示(一)--技術流ken Git介紹 Git(讀音為/gɪt/。)是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。 Git 是 Linus Torvalds 為了幫助管理 Linux 核心
VS中拒絕在if語句中賦值 (轉)
以前節選的內容,出處忘記了。 讓Visual C++拒絕在if語句的條件表示式中賦值 一旦不小心把if (c == '+') {}寫成了if (c = '+') {}是多麼地悲劇。 寫成下邊這樣吧if ('+' == c) {}又違揹人的直覺。 解決辦法:設定project的property,在C/C
【轉載】DELPHI操作excel(轉)
DELPHI操作excel(轉) (一) 使用動態建立的方法 首先建立 Excel 物件,使用ComObj: var ExcelApp: Variant; ExcelApp := CreateOleObject( ''Excel.Application'' );
位運算在角色許可權設計中的應用(轉)
1.引言 2.位運算基礎 3.位運算在角色許可權設計中的應用 4.為什麼in32的範圍是-2^31 ~ 2^31-1 ? 5.同餘的概念 6.模的概念幫助理解補數和補碼。 一、引言 這周在做一個新增角色許可權需求時,遇到下面這樣一行程式碼,這篇文章將圍繞這行程式碼展開。 us
C#中操作Word(8)—— 向Word中插入圖表的三種方法(一)
一、 前言 本文主要介紹向word中插入圖表的方法。方法共有三種,每一種都有自己的適用範圍和利弊。介紹之前,我們準備實驗用的文件,做一個如下圖所示的word模板,我們要做的的是在這個名叫chart的書籤中插入一個圖表,下面然後我將逐一進行介紹這三種方法:
Ibatis中insert用法(轉)
在Ibatis中,insert()的返回值為一個Object的主鍵,其實這個Object的主鍵是這樣的來的:如果在bean的xml檔案中設定了插入的keyProperty,則insert()方法返回的就是這個主鍵的值。 例如,所以我們想要在插入時想要插入一個sequence值到資料庫的某個
C語言登錄檔操作例項(轉)
#include <stdio.h>#include <windows.h>int main(void){char regname[]="Software//Microsoft//Windows//CurrentVersion//Run";HKEY hkResult;int ret=R
C#中操作Word(5)—— 利用BookMark物件寫Word文件
一、引言 本文主要介紹通過Word中的書籤Bookmark來向Word中寫入我們自定義的資料。之前的文章介紹了利用Range物件讀寫word的方法,用這種方法如果處理比較簡單的文件還好,若文件較複雜,就顯得有些力不從心了。 比如有這麼一個文件
C#中操作Word(2)—— 新建、開啟、儲存和關閉文件
本文中主要介紹C#中對word文件進行新建、開啟、儲存、關閉的方法。在本次試驗之前,先佈置試驗環境。首先,先新建一個winform的工程WordTest: 然後,在介面中新增一個按鈕,按鈕文字就叫做“測試”: 在按鈕的點選事
C#中操作Excel(4)—— 向Excel中插入兩種圖表以及設定圖表格式
一、引言 本文主要討論下向Excel中插入圖表的兩種方式。在Excel中圖表是有兩種級別的,一種是和sheet同級別的圖表,也就是說整個excel的標籤頁就是一個圖表;還有一種就是我們最常使用的在一個sheet中插入的圖表,我們姑且叫它sheet子圖表。這
(轉)Scala中協變(+)、逆變(-)、上界(<:)、下界(>:)簡單介紹
定義類 word ref 一個 pla 而不是 關系 repl 協變 看源碼的時候看到: trait ExtensionId[T <: Extension] {沒見過這個符號啊<: Scala上界(<:)和下界(>:) 1) U >: T
DNS中的七大資源記錄介紹!(轉)
多臺 .html 缺少 自己 平衡 控制 color ron read 原址 在Microsoft產品系列中,ADDS是一個很出色的設計平臺,說到AD,那麽我們就不得不提起他的合作夥伴--DNS,相信大家都知道,DNS在AD中的重要地位,就如男人和女人一樣,要想有所作為
CentOS 6.9配置網卡IP/網關/DNS命令詳細介紹及一些常用網絡配置命令(轉)
linux. centos fly fig details oba routing href 修改dns 一、IP 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 r