XMLを使ってみる(その3)
過去エントリー
外部ファイルからXMLを取得して表示
外部ファイルからXMLデータをロードしてみたいと思います。
外部ファイルからXMLデータをロードするには、次のようにURLLoaderクラスを使用します。
いつものように、TestXMLというテストswfを作成して、FlexSDKでビルドします。その時に使用しているコンフィグファイル(TestXML-config.xml)を読み込んで表示してみます。
/* TestXML.as */ package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.xml.*; public class TestXML extends Sprite { public var mLoader:URLLoader = new URLLoader(); public var mRequest:URLRequest = new URLRequest( "./TestXML-config.xml" ); public function TestXML() { mLoader.addEventListener( Event.COMPLETE, onComplete ); mLoader.load( mRequest ); } public function onComplete( event:Event ):void { var loader:URLLoader = event.target as URLLoader; var xmlRoot:XML = new XML(loader.data); // 取得したXMLをすべて表示. trace( "--- print All ---" ); trace( xmlRoot.toXMLString() ); trace( "--- print this name ---" ); trace( xmlRoot.name() ); // next codes. } } }
これをビルドして実行したら、以下のように出力されました。
[trace] --- print All --- [trace] <flex-config> [trace] <output>TestXML.swf</output> [trace] <default-size> [trace] <width>400</width> [trace] <height>200</height> [trace] </default-size> [trace] <default-frame-rate>24</default-frame-rate> [trace] <default-background-color>0xFFFFFF</default-background-color> [trace] <use-network>false</use-network> [trace] <compiler> [trace] <debug>true</debug> [trace] </compiler> [trace] </flex-config> [trace] --- print this name --- [trace] flex-config
XMLオブジェクトの名前も name() メソッドで出力されているのが確認できます。
XMLオブジェクトの子ノードを出力
上記コードで取得したXMLオブジェクト(xmlRoot)を引き続き走査してみたいと思います。
E4X準拠のXMLクラスセットにはXMLListというクラスがあり、XML.children()で子ノード一覧、XML.child(name)で指定名のノードリストを取得できますので、取得する様子を確認してみます。
上記コードの"// next codes."以下の部分に以下のコードを追加し、ビルドします。
// 一つ下の子ノードをすべて取得(→XMLList). trace( "--- get children ---" ); var xmlRootChildren:XMLList = xmlRoot.children(); trace( xmlRootChildren.toXMLString() ); // 一つ下の子ノードを名前で取得(→XMLList). trace( "--- get child [output] ---" ); var xmlOutput:XMLList = xmlRoot.child("output"); trace( xmlOutput.toXMLString() ); trace( xmlOutput.toString() );
デバッグ実行を行うと以下のような出力が行われ、望み通りの結果が得られたことが分かります。
[trace] --- get children --- [trace] <output>TestXML.swf</output> [trace] <default-size> [trace] <width>400</width> [trace] <height>200</height> [trace] </default-size> [trace] <default-frame-rate>24</default-frame-rate> [trace] <default-background-color>0xFFFFFF</default-background-color> [trace] <use-network>false</use-network> [trace] <compiler> [trace] <debug>true</debug> [trace] </compiler> [trace] --- get child [output] --- [trace] <output>TestXML.swf</output> [trace] TestXML.swf
昔のActionScriptで使われていたXMLNodeとかに比べると簡単でわかりやすい表現で助かります。