- 2008-10-07 (火) 5:50
- ActionScript
XMLのパースの練習に、AmazonのWebサービスAPIを用いて本を検索し、表紙の縮小画像をStage上にランダムに配置するFlashをAS3で書いてみました。
XMLの扱い方の一例
以下は上のFlashの解説ではありませんが、作成過程でXMLの扱いで詰ったところがあったのでピックアップしてみます。
使用するXMLデータ
通常は外部ファイルを読み込みますが下の例ではXMLデータをソースコード中に書き込んでいます。
まず、扱うXMLデータは、
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title><![CDATA[新版 明解C言語 入門編]]></title>
<author><![CDATA[柴田望洋]]></author>
<image>http://ecx.images-amazon.com/images/I/51N3ym-NBRL._SL75_.jpg</image>
</book>
<book>
<title><![CDATA[プログラミング言語C ANSI規格準拠]]></title>
<author><![CDATA[B.W. カーニハン]]></author>
<image>http://ecx.images-amazon.com/images/I/41W69WGATNL._SL75_.jpg</image>
</book>
<book>
<title><![CDATA[やさしいC++―まずは「C言語」からはじめよう!! (I・O BOOKS)]]></title>
<author><![CDATA[米村 貴裕]]></author>
<image>http://ecx.images-amazon.com/images/I/51PKHX9QEVL._SL75_.jpg</image>
</book>
</books>
とします。本のデータはAmazonで検索語を「C言語」にして検索した結果を用いています。
ちなみに、
<![CDATA[ホニャララ]]>
タグで囲まれた要素内では全ての文字列を扱うことが出来ます。
外部XMLデータからXMLオブジェクトを作成
大抵は外部ファイルから読み込みます。その場合は、URLLoaderクラスのdataフィールドをXMLのコンストラクタの引数に渡せばOKです。
var urlLoader:URLLoader = new URLLoader();
urlLoader.load("http://www.example.com/text.xml");
// 中略:ロードが完了(のイベントをキャッチ)したら↓
var booksXml:XML = new XML(urlLoader.data);
ここではbooksXml変数がXMLオブジェクトです。
ソースに直接XMLデータを書き込む場合
あまりそういった場合は無いのですが、テストなどの際は
var booksXml:XML = <?xml version="1.0" encoding="UTF-8"?> <books> <book> <title><![CDATA[新版 明解C言語 入門編]]></title> <author><![CDATA[柴田望洋]]></author> <中略> </book> </books>;
のように書きます。他にもXMLコンストラクタに文字列リテラルとして渡すことも可能です。その場合、渡す文字列は一行にします。
XMLの各要素と属性へのアクセス
今回扱うXMLの入れ子の深さ2ですかね。booksタグの中にbook要素があり、そのbookタグの中にtitle、author、image要素があり、それぞれのタグの中にほしいデータがある、と。
XMLオブジェクトにデータを代入しインスタンスを作成した際に、パースは終わっていますので子要素へのアクセスは「.」、子孫へは「..」や「[]」演算子を用います。また、子(子孫)属性に対しては「.@」「..@」です。
trace(booksXml.book); // 実行結果A (booksXml['book']と同値) trace(booksXml.book.title); // 実行結果B (xml['book']["title"]やbooksXml..titleと同値)
実行結果A
<book>
<title><![CDATA[新版 明解C言語 入門編]]></title>
<author><![CDATA[柴田望洋]]></author>
<image>http://ecx.images-amazon.com/images/I/51N3ym-NBRL._SL75_.jpg</image>
</book>
<book>
<title><![CDATA[プログラミング言語C ANSI規格準拠]]></title>
<author><![CDATA[B.W. カーニハン]]></author>
<image>http://ecx.images-amazon.com/images/I/41W69WGATNL._SL75_.jpg</image>
</book>
<book>
<title><![CDATA[やさしいC++―まずは「C言語」からはじめよう!! (I・O BOOKS)]]></title>
<author><![CDATA[米村 貴裕]]></author>
<image>http://ecx.images-amazon.com/images/I/51PKHX9QEVL._SL75_.jpg</image>
</book>
実行結果B
<title><![CDATA[新版 明解C言語 入門編]]></title> <title><![CDATA[プログラミング言語C ANSI規格準拠]]></title> <title><![CDATA[やさしいC++―まずは「C言語」からはじめよう!! (I・O BOOKS)]]></title>
一致する全ての要素をXMLList形式で返しています。実際のプログラムではfor文で回してデータを取得します。
上で使った演算子に代わるメソッド等もありますが、それらはまたの機会に取り上げてみます。
関連記事
- ActionScript: 画像ファイルをダウンロードして表示 - Loaderクラス
- ActionScript: Flash(*.swf)にmp3ファイルを埋め込む - Embedタグ
- AS3でお絵かきFlashを作る (5)エアーブラシ機能
- AS3でMind MapぽいFlashを作る (2)各ノードのドラック&ドロップ
- AmazoCluster: 一発で納得のいくものができればいいけれどね・・・
- Newer: ActionScript: Flash(*.swf)にmp3ファイルを埋め込む - Embedタグ
- Older: AS3でMind MapぽいFlashを作る (4)右クリックメニューを各ノードとステージに追加
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.yukun.info/blog/2008/10/actionscript-xml-element-attribute.html/trackback
- Listed below are links to weblogs that reference
- ActionScript: XMLの子要素の読み込み - XMLオブジェクトと「.. 」「[]」演算子 from Yukun's Blog