確実に。
XML の読み取り
var myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("ui.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
var xml:XML = new XML(e.target.data);
trace(xml.layout.widget[2].attribute.@value); // traces "picker.swf"
}
xml オブジェクトの読み取りは、dot.notation、bracket[indexes] を利用する他の階層の読み取りとよく似ていますが、ノードのプロパティにアクセスするための @attribute 識別子が追加されています。また、(一般的に)識別するだけxml.layout.widget
で、実際にはウィジェットのすべてのインスタンスとその内容が文字列として返されるため、少し奇妙です。
完全なドキュメントについては、次をお読みください。
コード共和国: AS3 XML
Adobe Actionscript 3 リファレンス: XML
レンダリング
これらのウィジェットのレンダリングは、データをどのように解釈するかの問題です。技術的には、 htmlwrapperまたはhtmlTextを介して制限された量の HTML レンダリングを試すこともできますが、そのようにしたいとは思わないでしょう。多くの場合、Flash でウィジェットの独自の表現を作成し、XML でそれらのウィジェットの一般的な逸脱を定義します。
次の XML を検討してください。
<?xml version="1.0" encoding="utf-8"?>
<layout>
<widget
kind="Spinner"
name="Alpha"
color="0xFF0000"
x="100"
y="100"
width="50"
height="50"
file="foo.jpg" />
<widget
kind="Slider"
name="Beta"
color="0x0000FF"
file="bar.swf" />
</layout>
次に、定義済みのプロパティとイベント リスナーを持つSpinner
との 2 つのクラスを実装できます。Slider
package {
import flash.display.*;
public class Spinner extends Sprite {
private var defaults:Object = {
"x":10,
"y":10,
"width":50,
"height":50,
"color":0x000000
};
public function Spinner(settings:Object = null) {
// Store the settings passed for any present defaults
for (var attribute:String in settings) {
if (defaults.hasOwnProperty(attribute)) {
defaults[attribute] = settings[attribute];
}
}
// Update the appearance to match the settings.
with (defaults) {
graphics.beginFill(color, 1);
graphics.drawRect(x, y, width, height);
graphics.endFill();
}
if (settings.hasOwnProperty("name")) {
this.name = settings.name
}
}
}
}
XML を読み取るときは、各ノードを調べて、そのノードの属性を取得し、それをクラス コンストラクターに適用します...
function processXML(e:Event):void {
var layout:XML = new XML(e.target.data);
for each (var widget:Object in layout) {
switch (widget.kind) {
case "Spinner":
addChild(new Spinner(widget))
break;
case "Slider":
addChild(new Slider(widget))
break;
}
}
}
免責事項: この方法で xml ノードにアクセスすることは、おそらく正しくありません。疑似コードと考えてください。私は常にxmlをネストされたオブジェクト/配列階層として使用する前にサニタイズするので、少し練習不足です。
簡単に言えば、XML はオブジェクトの外観を指示しますが、Actionscript はそれらのオブジェクトが何であるか、いつ、どのように画面に追加するかを指示します。