Friday, February 8, 2008

AIR - ローカルXMLを読み込むサンプル

AIRでは、ローカルのXMLファイルデータを読み込むことが可能です。
File、FileStream、XMLのデータタイプを使用してXMLデータを読み込みます。

まずは、以下のようなXMLデータを用意します。


<?xml version="1.0" encoding="utf-8"?>

<set>

<sample>

<data>data1</data>

</sample>

<sample>

<data>data2</data>

</sample>

<sample>

<data>data3</data>

</sample>

<sample>

<data>data4</data>

</sample>

</set>



このXMLデータを「sample.xml」というファイル名で保存します。

次にFlex Builderで新規にプロジェクトを作成し、プロジェクトの「src」というフォルダにフォルダにこのsample.xmlを保存しておきます。

次に以下のコードのMXMLファイルに記述します。


<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>

<![CDATA[



public var sampleXML:File;

public var stream:FileStream;



[Bindable]public var rXML:XML;



private function loadSampleXML():void

{



sampleXML = File.applicationDirectory;

sampleXML = sampleXML.resolvePath("sample.xml");



stream = new FileStream();



if(sampleXML.exists)

{

stream.open(sampleXML, FileMode.READ);

rXML = XML(stream.readUTFBytes(stream.bytesAvailable));

stream.close();

trace("XML data: "+rXML.sample);

}

}



]]>

</mx:Script>



<mx:VBox x="0" y="0" width="100%" height="100%">

<mx:Button label="Click Me" click="loadSampleXML();"/>

</mx:VBox>



</mx:WindowedApplication>



最後にデバッグモードでテストして、ボタンをクリックするとコンソールに以下のようなXMLデータが出力されます。


XML data: <sample>

<data>data1</data>

</sample>

<sample>

<data>data2</data>

</sample>

<sample>

<data>data3</data>

</sample>

<sample>

<data>data4</data>

</sample>



それでは、どのようにしてXMLデータを読み込んだのか確認してみよう。

まず、このサンプルで使用する変数の宣言をする必要があるので、以下の変数を用意してます。

  • public var sampleXML:File;
  • public var stream:FileStream;
  • [Bindable]public var rXML:XML;


次に

sampleXML = File.applicationDirectory;


でデータが格納されてある場所を指定します。

sampleXML = sampleXML.resolvePath("sample.xml");


で実際のXMLファイルを読み込みます。

stream = new FileStream();


で新しくFileStreamオブジェクトを用意し、ファイルの取り扱い準備をします。

今回はXMLデータを読み込むので、以下のように.openのFileMode.READを使用します。

stream.open(sampleXML, FileMode.READ);

rXML = XML(stream.readUTFBytes(stream.bytesAvailable));



読み込み処理後は、stream.close();でクローズします。

XMLデータ内の<sample>の部分を取得したいので、

trace("XML data: "+rXML.sample);


と、.sampleがsampleタグ内のデータを引っ張り出してくることになります。

もっと深く細かく指定したデータを取得したい場合、例えば、今回のXMLデータで、Sampleのデータ部分のみを取得したいのであれば、rXML.sample.dataを指定することになります。

次回は、任意のパスのXMLデータを取得する方法および取得したXMLデータをデータグリッドに読み込ませるサンプルを紹介したいと思います。

1 comment:

Unknown said...

Flexを勉強中の初心者ですが、とても解りやすかったです。

ありがとうございます。