ActionScript 3.0で始めるオブジェクト指向スクリプティング

第27回 XMLデータを扱う

この記事を読むのに必要な時間:およそ 3.5 分

それでは,XMLデータから必要な値を指定して,取出す方法について説明しよう。XMLのノードは,ドット演算子(.)でその名前を指定して取出す。得られるノード群のデータ型は,XMLListとする。たとえば,上記XMLインスタンスの<product>ノード群は,つぎのようにノード名を指定して求められる。

var products:XMLList = cs4_xml.product;
trace(products);

取出したノード群のXMLListインスタンスは,trace()関数で図3のように[出力]される。

図3 trace()関数で[出力]されたXMLListインスタンスがもつノード群

図3 trace()関数で[出力]されたXMLListインスタンスがもつノード群

XMLListクラスのインスタンスは,複数ノードのXMLオブジェクトを配列のようにエレメントとしてもつ。配列アクセス演算子[]でインデックスを指定すれば,その位置のノードとなるXMLインスタンスが得られる。たとえば,最初の<product>ノードであれば,そのXMLListインスタンス(products)のインデックス0で取出せる図4)⁠

var first_product:XML = products[0];
trace(first_product);

図4 取出したXMLインスタンスのtrace()関数による[出力]

図4 取出したXMLインスタンスのtrace()関数による[出力]

XMLListインスタンスにノード名をドット演算子(.)で指定して,子ノード群を取出すこともできる。前掲の<product>ノード群のXMLListインスタンスに対してさらに<name>というノード名で,子ノード群が絞り込める図5)⁠

var names:XMLList = products.name;
trace(names);

図5 絞り込まれた子ノード群のXMLListインスタンスをtrace()関数で[出力]

図5 絞り込まれた子ノード群のXMLListインスタンスをtrace()関数で[出力]

また,ノードの要素名を条件にして,子ノード群が選び出せる。条件は,括弧()を使って記述する。たとえば,前掲の<product>ノード群のXMLListインスタンス(products)から<price>要素が699(ドル)の子ノード群は,つぎのようにして得られる。

var products_699:XMLList = products.(price == 699);
trace(products_699);

図6 条件に合った子ノード群のXMLListインスタンスをtrace()関数で[出力]

図6 条件に合った子ノード群のXMLListインスタンスをtrace()関数で[出力]

条件にはノードの属性も使える。指定するときは,属性名の前に@をつける。たとえば,suite属性が"Web"の<product>ノード群を選び出すには,つぎのようなスクリプトを書けばよい。

var products_web:XMLList = products.(@suite == "Web");
trace(products_web);

図7 指定された属性の子ノード群のXMLListインスタンスをtrace()関数で[出力]

図7 指定された属性の子ノード群のXMLListインスタンスをtrace()関数で[出力]

さらに,ifステートメントなどと同じように,条件式は組み合わせてもよい。たとえば,<product>ノード群について,suite属性が"Web"で<price>要素が600(ドル)より高いという指定はつぎのおりだ図8)⁠

var products_web:XMLList = products.(@suite == "Web" && price > 600);
trace(products_web);

図8 属性と要素のふたつを条件に取出したの子ノード群のXMLListインスタンスがtrace()関数で[出力]

図8 属性と要素のふたつを条件に取出したの子ノード群のXMLListインスタンスがtrace()関数で[出力]

本稿の結びとして,前項「外部XMLデータの読込み」で掲げたサンプルスクリプト1におけるXMLデータの取出しのステートメントについ,改めて処理内容を確かめよう。

var product_web:XMLList = cs4_xml.product.(@suite == "Web");
var name_str:String = product_web[0].name.toString();

まず,XMLデータ(cs4_xml)の<product>ノードについてsuite属性が"Web"のノード群を,XMLListインスタンス(product_web)として取出している。つぎに,取出した<product>ノード群の最初(インデックス0)のXMLインスタンスから<name>要素を得て,それを文字列に換えているのだ図1)⁠

図1(再掲) ロードしたXMLデータから指定の製品名をTextFieldインスタンスに設定して表示

図1(再掲) ロードしたXMLデータから指定の製品名をTextFieldインスタンスに設定して表示

次回は,文字列のパターンの表現である「正規表現」を扱うRegExpクラスについて解説する。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書