XMLConnectorとDataBinding(1)
2005年10月19日 プログラム
[コンポーネントの使い方]
前回の記事からXMLのロードに関することを色々調べていたのですが、
どうにもうまくいきません・・。
テスト環境で、試してはいるのですが・・。どうしたものやら。
そもそもDataBindingの資料がとっても少ないのが、なんとも。
[仕方ないので]
自力でやることに。
【用意したXML】
【読み込み方】
流れは以下のとおり。
(1)XMLファイルをロードする。
XMLファイルをロードするのは、XMLオブジェクト。
この時に、読み込み完了時のイベントハンドラを定義しておくこと。
データの編集はデータの読み込み完了後に行うため。
(2)XMLデータから、ノードを取り出す。
各ノードを処理するのが、XMLNodeクラス。
XMLNode.childNodesで、そのノードの子ノード群を読み込むことができる。
ノードの内部の値を取り出すには、属性の値を取り出す形にするか、
子ノードの中を深くたどっていくかのどちらかの方法をとることになる。
こうやってアクセスしてみると、属性に設定したほうが感覚的にアクセスできそうな感じ。
とりあえず、サンプル的なものができた。
【その他のポイント】
肝になるのは、下記の3点を、メインアクション中に追加すること。
・XML.prototype.ignoreWhite = true;
改行やタグを空白として読ませない。
改行やタグを有効にすることで、XMLファイルの記述が楽に。
・System.useCodepage = true;
Flash内部の処理を行う文字コードをShift-Jisに変更することで、
日本語での外部ファイルの読み込みを可能にする。
(通常はUTF-8で読まれる。)
余談ではあるが、
最近UTF-8で書いたXMLをActiveXで操作しようとしたことがあり、
その際に、と宣言しているのに、
UTF-8で保存していたことから、表示できないといわれて死に掛けた記憶が。
・XMLの読み込み完了後でないと、データの編集はできないこと。
onLoadイベントハンドラ内にデータの編集を記述すること。
これをしないで、フレームのロード時にデータを編集するメソッドを発行しても、
フレームのロードと同期が取られていないので、データを利用することができない。
ということで、微妙に続く。
[余談]
配列を書いてみたら、[アイ(Iのこと)]の部分が斜体のタグに変換されて驚いた。
ダイアリーノートの変わった仕様ですな。
前回の記事からXMLのロードに関することを色々調べていたのですが、
どうにもうまくいきません・・。
非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0311001.html
テスト環境で、試してはいるのですが・・。どうしたものやら。
そもそもDataBindingの資料がとっても少ないのが、なんとも。
[仕方ないので]
自力でやることに。
【用意したXML】
ダイアリーノートにはタグはかけない
http://keepers.web.infoseek.co.jp/cgi-bin/flash/sample.xml
【読み込み方】
流れは以下のとおり。
(1)XMLファイルをロードする。
var mainXML:XML = new XML();//XMLオブジェクトを作る
mainXML.onLoad = XMLLoaded;//イベントハンドラ指定
mainXML.load("sample.xml");//xmlファイルを読み込む
XMLファイルをロードするのは、XMLオブジェクト。
この時に、読み込み完了時のイベントハンドラを定義しておくこと。
データの編集はデータの読み込み完了後に行うため。
(2)XMLデータから、ノードを取り出す。
//XMLの全データをロード(rootNodeもXMLNodeオブジェクト)
var rootNode:XMLNode = new XMLNode();
//ルート直下のノードを配列の形で取り出す
//(中身はXMLNodeオブジェクト)
var elementNodes:Array = new Array();
//XMLロード完了時に呼び出されるメソッド
function XMLLoaded() {
//XMLのルート(全データ)を取り出す(rootNodeもXMLNodeオブジェクト)
rootNode = mainXML.firstChild;
//ルートの直下のノードを配列の形で取り出す
elementNodes = rootNode.childNodes;
//順に表示
//配列の中身に格納されているのは、XMLNodeオブジェクト
for(var j = 0;j < elementNodes.length;j++)
{
trace(elementNodes[j].attributes.id);
trace(elementNodes[j].attributes.country);
trace(elementNodes[j].childNodes[0].firstChild);
trace(elementNodes[j].childNodes[1].firstChild);
}
}
各ノードを処理するのが、XMLNodeクラス。
XMLNode.childNodesで、そのノードの子ノード群を読み込むことができる。
ノードの内部の値を取り出すには、属性の値を取り出す形にするか、
子ノードの中を深くたどっていくかのどちらかの方法をとることになる。
こうやってアクセスしてみると、属性に設定したほうが感覚的にアクセスできそうな感じ。
とりあえず、サンプル的なものができた。
(仮
http://keepers.web.infoseek.co.jp/cgi-bin/flash/xml_dom_test.swf
【その他のポイント】
肝になるのは、下記の3点を、メインアクション中に追加すること。
・XML.prototype.ignoreWhite = true;
改行やタグを空白として読ませない。
改行やタグを有効にすることで、XMLファイルの記述が楽に。
・System.useCodepage = true;
Flash内部の処理を行う文字コードをShift-Jisに変更することで、
日本語での外部ファイルの読み込みを可能にする。
(通常はUTF-8で読まれる。)
余談ではあるが、
最近UTF-8で書いたXMLをActiveXで操作しようとしたことがあり、
その際に、と宣言しているのに、
UTF-8で保存していたことから、表示できないといわれて死に掛けた記憶が。
・XMLの読み込み完了後でないと、データの編集はできないこと。
onLoadイベントハンドラ内にデータの編集を記述すること。
これをしないで、フレームのロード時にデータを編集するメソッドを発行しても、
フレームのロードと同期が取られていないので、データを利用することができない。
ということで、微妙に続く。
(参考)非公式テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0509002.html
[余談]
配列を書いてみたら、[アイ(Iのこと)]の部分が斜体のタグに変換されて驚いた。
ダイアリーノートの変わった仕様ですな。
コメント