SIHOのプログラミングわーくワク

興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり?  まだまだ続く、楽しいお仕事わーくワク♪

  • « 
  • 10 
  • 11 
  • 12 
  • 13 
  • 14 
  • 15 
  • 16 
  • 17 
  • 18 
  • 19 
  • 20 
  • 21 
  • 22 
  • 23 
  • 24 
  • 25 
  • 26 
  • 27 
  • 28 
  • 29 
  • 30 
  • 31 
  • »

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

外部XMLのデータを読み込んでObjectオブジェクトとして配列に格納

2009.10.07 (Wed)

AS3からXMLの扱いがとっても簡単になったそうですね。
それならばいっそのこと、ファイルパスとファイル名だけ書き換えればあとは自動で読み込んで配列に格納してくれちゃうと便利だな。
それも、配列に入れるときに、Objectオブジェクトにしてあると、子ノードのデータの呼び出しも配列番号でいけるからもっと楽チンだな。と思って、書いてみました。
こういうのはカスタムクラス(?)みたいな外部asファイルにすると、扱いがもっと楽になるんだろうな…とは思ったのですが、まだお勉強がクラスにまで進んでいないので、今後クラスを学習したときに外部asファイルに直したいと思っています。
まぁ、とりあえず、スクリプトソースのまま公開しておきます。

■XMLファイルについて
子ノードまでです。孫ノードには対応していません。また、各ノードごとの子ノード数&子ノード名は統一してあることが前提です。
data1.xml の中身

<xml>
<xmldata>
<id>1</id>
<title>いろはにほへと</title>
<text> いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん 色は匂へど 散りぬるを 我が世誰そ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず </text>
<img1>hogehoge1.png</img1>
<img2>hogehoge2.png</img2>
</xmldata>
<xmldata>
<id>2</id>
<title>じゅげむ</title>
<text> じゅげむじゅげむごこうのすりきれかいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつくうねるところにすむところやぶらこうじのやぶこうじぱいぽぱいぽぱいぽのしゅーりんがんしゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーのちょうきゅうめいのちょうすけ</text>
<img1>hogehoge3.png</img1>
</xmldata>


ここでは、xmldataノードに格納されている子ノードのデータを子ノード名をObjectオブジェクトのプロパティ値として設定します。
■スクリプト

/*----XMLからデータを読み込んでObjectオブジェクトの形で配列に格納する処理---*/
/*----値を使用するときは、「配列名[0][Objectオブジェクトのプロパティ名]」で呼び出す。----*/
/*----Objectオブジェクトを格納した配列名[index番号][子ノード名を格納した配列名[index番号]]----*/
/*----ここでは「nodeData_array[x][dataNodeList_array[i]]」のx,iに適切な番号を入れて呼び出す----*/

//+++++設定する箇所ここから+++++//
// URLを定数で設定
const myURL:String = "commons/images/";
const xmlUrl:String = myURL+"data1.xml";
//+++++設定する箇所ここまで+++++//

//XMLを読み込む変数(my_xml)を設定
var my_xml:XML;

//XMLの指定ノードを格納する変数を設定
var dataNodeList:XMLList;//xmldataノード

// XMLのLoaderオブジェクトを作成
var myLoader:URLLoader = new URLLoader();

// XMLのURLリクエストを作成
var myRequest:URLRequest=new URLRequest(xmlUrl);

// XMLの子ノード名を格納する配列を宣言
var dataNodeList_array:Array;

// XMLの全データを格納する配列を宣言
var nodeData_array:Array ;

//XMLのロード後に処理を行うイベントリスナーを設定
myLoader.addEventListener(Event.COMPLETE, SetArray);

//XMLをロードする
myLoader.load(myRequest);

function SetArray(evt:Event):void {
//読み込んだXMLオブジェクトを変数に代入
my_xml=XML(myLoader.data);

//XMLの第一階層のdataノードを変数に代入
dataNodeList=my_xml.xmldata;

// XMLのノード名を格納する配列を作成
dataNodeList_array = new Array();

// XMLのノード名を配列に格納(子ノードの個数は同一であること/孫ノードは未対応)
//dataNodeList_array = id,title,text,img1,img2
for each (var p:XML in dataNodeList[0].*){
var xProp:String = p.localName();
dataNodeList_array.push(xProp);
}

// XMLのdataノード以下の子ノードデータを格納する配列を作成
nodeData_array = new Array();

// Objectオブジェクトを作成し、XMLのノード名をプロパティに、ノードタグの値をプロパティ値に代入。
for (var x:uint = 0 ; x < dataNodeList.length() ; x++ ){

nodeData_array[x] = new Object();

for ( var i:uint = 0 ; i < dataNodeList_array.length ; i++){

nodeData_array[x][dataNodeList_array[i]] = dataNodeList[x].elements(dataNodeList_array[i]).toString();
trace([dataNodeList_array[i]],nodeData_array[x][dataNodeList_array[i]]);
};
};
}

コメント

コメントの投稿

トラックバック

この記事のトラックバックURL

 | HOME | 

プロフィール

siho_prof

SIHO
しほ

Twitter:
SIHO_o

viva mambo, inc.
iPhone&iPad / Flash / Kinect
使用言語:Objective-C, ActionScript 3.0, Javascript, Lua, PHP, C#, C, C++, WSH。
F-site staff

Solar System Simulator 広報

Web,スマートフォン、Desktopを問わず、アプリ制作が好物。執筆は必要に応じて。お仕事くださいまし。

サイネージ:ガンダムフロント東京・キャラクターフォトスポット設計(2012/4~常設)

アトラクション:富士急ハイランド 戦国BASARA ゲーム設計&プログラミング(2010/7-2012/4にて常設展示)

イントラシステム:「某メーカー研究所KJ法システム」DB,Flash,PHPを含むソリューション設計&DB構築、「美術系専門学校の生徒管理システム」iPadクライアントを含むソリューション設計&DB構築

iPhone/iPadアプリ:某球団試合速報アプリ、『魂を熱くさせる 宇宙飛行士100の言葉』『Mitaka Gallery -てのひら宇宙-』

書籍同梱ソフト:『4次元デジタル宇宙紀行Mitaka』『DVD-ROM&図解 動く! 深海生物図鑑』『DVD-ROM&図解 ハッブル望遠鏡で見る宇宙の驚異』

著書:『世界一わかりやすい Windows 7』『世界一わかりやすい Flash CS3』

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。