前回はXMLデータを取得して表示する基本を解説しました。今回は,
データポインタ
データポインタとは
前回出てきたデータパス
それに対してデータポインタは,
データポインタの基本形
実例で説明します。リスト1を実行すると画面上に
リスト1
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds" >
<world name="世界">
<country area="ヨーロッパ" name="イタリア" />
<country area="ヨーロッパ" name="ギリシャ" />
<country area="アフリカ" name="ケニア" />
<country name="日本" />
<space name="月" />
</world>
</dataset>
<simplelayout/>
<text id="txt"/>
<datapointer xpath="ds:/"><!-- ① -->
<handler name="ondata">
this.selectChild(); // ②
var t = this.xpathQuery('@name'); // ③
txt.setAttribute('text',t); //④
</handler>
</datapointer>
</canvas>
以下,
① <datapointer>でデータポインタを宣言します。そのxpath属性で,
② thisは自分自身つまりデータポインタを指します。selectChild()というメソッドはデータポインタのメソッドで,
③ xpathQuery()は,
④ txtのtext属性値,
データポインタの操作では,
データポインタのループ処理
データポインタはXMLデータ中の1つの階層にのみアクセス可能なので,
リスト2
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds" >
<world name="世界">
<country area="ヨーロッパ" name="イタリア" />
<country area="ヨーロッパ" name="ギリシャ" />
<country area="アフリカ" name="ケニア" />
<country name="日本" />
<space name="月" />
</world>
</dataset>
<simplelayout/>
<text id="txt" multiline="ture"/>
<datapointer xpath="ds:/"><!-- ① -->
<handler name="ondata">
this.selectChild(2); // ②
do{
var area = this.xpathQuery('@area'); // ③
if(area=="ヨーロッパ" || area=="アフリカ"){ // ④
var name = this.xpathQuery('@name'); // ⑤
txt.addText(name + "\n"); //⑥
}
}while(this.selectNext()); //⑦
</handler>
</datapointer>
</canvas>
① データポインタを宣言し,
② selectChild(2)は2階層下に移動するという意味です。selectChild(2)の括弧内の数字は移動する階層の数で,
③ area属性値を変数areaに格納しています。
④ area属性値がヨーロッパあるいはアフリカかどうかを判断しています。
⑤ name属性値を変数nameに格納しています。
⑥ addText()は文字列を追加するメソッドです。nameに改行コード(\n)を追加して,
⑦ selectNext()は,
ということで,