01.23
恩…這個題目很饒舌,別這樣,我也是想了30秒鐘才決定取這個題目的,緣由來自於icemilk在留言板的留言,老實說我看了很久才知道他想做什麼,因為這實在是不好解釋。
留言內容如下:
老師 我想問一個關於XML的問題
小弟現在得到一串位子的字串,例如photos.photo.@name
如何可以使用這個字串搜尋xml的值
大概的樣子如下:
var x:XML=new XML(xxxxx);
var value:String = x.photos.photo.@name.toString();
如果直接打的話可以取到值,但如果是字串就沒辦法讀直,是否需要split之後丟進來或是有可以直接轉屬性的方法?
搜尋了線上文件之後 有看到類似的訪問方式
訪問屬性: value = x.photos.photo.@["name"];
或是訪問節點的值: value = x.photos["photo"];
但小弟嘗試用
value = x["photos"]["photo"].@["name"];
value = x["photos.photo.@name"] 都拿不到值
所以上來請老師幫忙看一下 謝謝
另一篇留言是:
真的很感謝你
目前有兩份xml,其中一份是記錄如何從另外一份xml拿資料,
行為大致如下:
var axml:XML = 方法.xml;
var bxml:XML = 目標.xml;
var a:String= axml.從b讀取資料的位置.toString();
//ex. a = photos.photo.@name var b:String= bxml.a.toString();
目的是要拿到b的值
在麻煩老師看一下
其實解法不難,這個示範是用Flex寫的,但是其實在Flash中使用ActionScript 3.0的寫法也都是一模一樣的,答案就在下面的程式碼示範中:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()"> <mx:Script> <![CDATA[ private var source:XML; private var apply:XML; private function init():void { this.source=<root> <method>method1</method> <method>method2</method> <method>method3</method> <method>method4</method> </root>; this.leftXML.text=this.source; this.apply=<root> <method1>anistar</method1> <method2>mary</method2> <method3>katy</method3> <method4>Frances</method4> </root>; this.rightXML.text=this.apply; } private function clickHandler():void { var fromSource:String=this.source.method[0]; this.answer.text=this.apply[fromSource]; } ]]> </mx:Script> <mx:HBox> <mx:TextArea id="leftXML" width="200" height="150"/> <mx:TextArea id="rightXML" width="200" height="150"/> </mx:HBox> <mx:Button label="Get Result" click="clickHandler()"/> <mx:Label id="answer" text=""/> </mx:Application>
順便放上執行的示意圖,這樣讓你更容易知道是如何運作的:

相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


老師你好,我有買你的書哦(先打關係一下)
我正試著用 flex + air + xml 做些東西
只是,還是不知若我想新增資料進入 xml 檔案中,怎麼做最好?
我有查了一下資料,應該是可以用 fileStream類的可以做到,只是,還是不知怎麼做比較好
老師可否給些提示??
是否可以請你說明一下你現在目前是用Flex還是AIR再做XML檔寫入的動作,因為解法是不同的。
所以有解決的方法嗎@@
沒輒….要自己寫特別的操作方法去處理喔。
不知道老師是否有收到信呢?
我看到你給的sample了,你不能這樣做,因為[]的寫法跟eval不一樣,他只能填入單一屬性而不是一連串的路徑描述法。
阿 tag被擋掉了,不知道老師知不知道我的意思@@
我看不懂耶 Orz
你可以把被擋掉的內容寄給我好了, anistar.tw@yahoo.com.tw
嗯嗯 不好意思 老師,我又來了
老師的解法的確是我要問的問題,不過目前遇到的困難是,如果apply的資料不是在第一層的話,我拿不到,拿老師的sample我改一下
this.source=
method1.data.@id
method2.data.@id
method3.data.@id
method4.data.@id
;
this.apply=
;
後面的寫法一樣
var fromSource:String=this.source.method[0];
this.answer.text=this.apply[fromSource];
但是結果得不到
再麻煩老師開釋一下