重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんばんは。よろしくお願いいたします。

AS2,以下のスクリプトについて

import mx.xpath.XPathAPI;
abc=new Array();
myXML= new XML();
myXML.ignoreWhite = true;
myXML.onLoad =function (){
var XPathString:String = "/data/abc/*";
//条件を満たすノードを配列に格納
abc = XPathAPI.selectNodeList(this.firstChild, XPathString);
textarea1.text=abc[0]; //(1)
}
myXML.load("data.xml");
textarea2.text=abc[0]; //(2)

条件を満たすノードを配列abcに格納したいのですが、(1)のabcには対象の
ノードが格納されるのに対して、(2)のabcには何も格納されていません。
(2)のabcでも対象のノードを格納するにはどのようにしたらよいのでしょうか?

A 回答 (2件)

データなどがないので何にも検証していませんが。



単純に 「data.xml」 がロードされる前に

textarea2.text=abc[0]; //(2)

を実行しているので,
配列 abc は空のままであるため (2)のabc には何も格納されないだけだと思います。


textarea1.text=abc[0]; //(1)

の方は,
myXML.onLoad =function (){ } 内で実行されます。
つまり,
myXML.onLoad(=myXML に何かがロードされた)時に実行されます。
ですから,配列 abc に何かのデータが入るので,
textarea1.text には何かが表示されるのだと思います。


単純に,こうすれば良いだけだと思いますが↓。

abc = XPathAPI.selectNodeList(this.firstChild, XPathString);
textarea1.text=abc[0]; //(1)
textarea2.text=abc[0]; //(2)
}


======================

// myXML に何かがロードされたときに 動作A を実行
myXML.onLoad = function(){
  動作A();
}

 コレ↑ と コレ↓ は同じようなことです。

// myButton がクリックされたときに 動作A を実行
myButton.onRelease = function(){
  動作A();
}

上は,
XML がロードされたときにはじめて実行する動作を定義しているだけで,
XMLがロードされない限り実行されません(ロード失敗でも実行されますが)。
いつXMLがロードされるかなど知りません。
回線の状況やファイル容量などによって全く変わります。
とにかくXMLがロードされたときにはじめて 動作A が実行されます。

下も,
ボタンがクリックされたときにはじめて実行する動作を定義しているだけで,
ボタンがクリックされない限り実行されません。
いつボタンがクリックされるかなど知りません。
Flashを閲覧した人のボタンの存在認識やクリックしたい気分によって全く変わります。
とにかくボタンがクリックされたときにはじめて 動作A が実行されます。


長く書きましたが,
結局 #1 の方の書かれていらっしゃることと結論は同じです。
    • good
    • 0

なぜ(2)の記述がonLoad関数の外にあるのかはわかりませんが、(2)の時点では、XMLが読み込まれる前に参照していることになりますので、(2)の記述をonLoad関数の中に記述する必要があります。



____________________
myXML.onLoad =function (){
var XPathString:String = "/data/abc/*";
//条件を満たすノードを配列に格納
abc = XPathAPI.selectNodeList(this.firstChild, XPathString);
textarea1.text=abc[0]; //(1)
textarea2.text=abc[0]; //(2)
}
myXML.load("data.xml");
____________________
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!