メイン コーダーズルーム【スクリプト系】 xmlの読み込みの変数化 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
afroman | Åê¹ÆNo.11279 投稿日時: 2004-10-4 13:28 |
新米 居住地: 関西 投稿: 4
使用環境:
MAC OSX10.3 Flash MX2004 |
xmlの読み込みの変数化 はじめまして。いつも見て参考にさせてもらっています。
さて、現在xmlを読み込ませてるのですが、xmlのファイルが複数 あり、それを順番に表示さたいと思っています。 現状はそれぞれのxmlを異なる変数にして読み込ませてるのですが これをもうちょっと効率よく1つのスクリプトで1つの数値をかえるだけでなんとかならないかと画策してる所です。 _root.neta[0].ignoreWhite = true; _root.neta[0].load("neta0.xml"); _root.neta[0].onLoad = function(success) { // xml解析 if (success) { _root.neta[0].parseXML(neta); _root.title[0] = _root.neta[0].firstChild.firstChild.firstChild.firstChild.nodeValue; _root.link[0] = _root.neta[0].firstChild.firstChild.firstChild.nextSibling.firstChild.nodeValue; _root.des[0] = _root.neta[0].firstChild.firstChild.firstChild.nextSibling.nextSibling.firstChild.nodeValue; _root.lang[0] = _root.neta[0].firstChild.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue; _root.item[0][0] = _root.neta[0].firstChild.firstChild.firstChild.nextSibling.nextSibling.nextSibling.nextSibling; for (i=1; i<=3; i++) { _root.item[0][i] = _root.item[0][i-1].nextSibling; } for (i=0; i<=3; i++) { _root.neta_array[0][i] = _root.item[0][i].firstChild; _root.Vneta_array[0][i] = _root.neta_array[0][i].firstChild.nodeValue; _root.link_array[0][i] = _root.item[0][i].lastChild; _root.Vlink_array[0][i] = _root.link_array[0][i].firstChild.nodeValue; } } } xmlは neta0.xmlとし、 <channel> <title>タイトルだよ</title> <link>http://www.####.html </link> <description>Summary for """"</description> <language>ja</language> <item> <title>項目1</title> <link>00.xml</link> </item> <item> <title>項目2</title> <link>01.xml</link> </item> <item> <title>項目3</title> <link>02.xml</link> </item> <item> <title>項目4</title> <link>03.xml</link> </item> </channel> です です。[0]の所を変数にしてforでくくったらどうかとおもっているのですが、例えば[a]にしてfor(a=0; a<=2; a++){ }でくくると どうしてもundefinedとでてしまいます。neta0.xmlの所はneta[a].xml としました。xmlはneta0.xml,neta1.xml,neta2.xmlとしています。 まだまだflashにしてもxmlにしても初心者ですがよろしくお願いします。 |
関たかまさ | Åê¹ÆNo.11281 投稿日時: 2004-10-4 13:52 |
常連 居住地: 埼玉 投稿: 61
使用環境:
WinXP Pro(sp1) FlashMX 2004 Pro 7.2 |
Re: xmlの読み込みの変数化 こんにちわ。
XMLの操作だったら、forのループよりもwhileでnodeを見た処理が良いと思います。 たとえば。。。
みたいな感じですかね。 あとはXMLのデータですが、ループしない部分とする部分をひとくくりにしないで大きな2つのノードにするとわかりやすいかもしれませんね それとこれはあくまでも経験上の話ですが、FlashのActionScriptのパーサーはちょっと他のネイティブ系なものより処理が重めでノードの階層が深いとちょっともたつき感がありました。 階層をあまり使わないで属性だと結構早く処理してくれましたよ ご参考になればいい情報でした。 |
関たかまさ | Åê¹ÆNo.11283 投稿日時: 2004-10-4 14:19 |
常連 居住地: 埼玉 投稿: 61
使用環境:
WinXP Pro(sp1) FlashMX 2004 Pro 7.2 |
Re: xmlの読み込みの変数化 ごめんなさい、書き忘れです。
引用: さて、現在xmlを読み込ませてるのですが、xmlのファイルが複数 この問題ですが、内部構造が一緒であればXMLオブジェクトの変数を定義してappendChildで追加していけば良いじゃないでしょうか? それだったら前回レスのようにwhileでまわせると思います。 あと、[0]みたいに処理できるかどうかはデバッガで一度どのように変数がストアされているかのぞいてみてはどうでしょう? きっとすぐにわかると思いますよ |
afroman | Åê¹ÆNo.11284 投稿日時: 2004-10-4 15:01 |
新米 居住地: 関西 投稿: 4
使用環境:
MAC OSX10.3 Flash MX2004 |
ちょっと説明不足でしたでしょうか(^^;) お早い返答ありがとうございます。
引用: XMLの操作だったら、forのループよりもwhileでnodeを見た処理が良いと思います。 ちょっと説明不足だったのですが 、xmlは操作というより単純に読み込むだけなのです。xmlの書き出しは別から書き出しています。 読み込むだけでもwhileの方がいいのでしょうか?また、今回の場合、whileとfor、どちらも同じかなと思ったのですが、その場合はwhileの方がよいのでしょうか? 引用:
appendChildは読み込みだけの時にもつかえるのでしょうか? 一応変数にした場合のも乗せておきます。 _root.neta[0].ignoreWhite = true; _root.neta[1].ignoreWhite = true; _root.neta[2].ignoreWhite = true; _root.neta[0].load("neta0.xml"); _root.neta[1].load("neta1.xml"); _root.neta[2].load("neta2.xml"); for (i=0; i<=2; i++) { _root.neta[i].onLoad = function(success) { // xml解析 if (success) { _root.neta[i].parseXML(neta); _root.title[i] = _root.neta[i].firstChild.firstChild.firstChild.firstChild.nodeValue; _root.link[i] = _root.neta[i].firstChild.firstChild.firstChild.firstChild.nodeValue; _root.des[i] = _root.neta[i].firstChild.firstChild.firstChild.nextSibling.nextSibling.nodeValue; _root.lang[i] = _root.neta[i].firstChild.firstChild.firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue; _root.item[i][0] = _root.neta[i].firstChild.firstChild.firstChild.nextSibling.nextSibling.nextSibling.nextSibling; for (j=1; j<=3; ji++) { _root.item[i][j] = _root.item[i][j-1].nextSibling; } for (j=0; j<=3; j++) { _root.neta_array[i][j] = _root.item[i][j].firstChild; _root.Vneta_array[i][j] = _root.neta_array[i][j].firstChild.nodeValue; _root.link_array[i][j] = _root.item[i][j].lastChild; _root.Vlink_array[i][j] = _root.link_array[i][j].firstChild.nodeValue; } } } } っというふうにしてます。 _root.neta[0].ignoreWhite = true; _root.neta[0].load("neta0.xml"); の部分も置き換えたいのですが、neta0.xmlの部分をさらに変数で読み込もうとするとさらにscriptが増えそうなので今回は省きました。 xmlの中身は同じ構成でテキスト内容が違うだけだと思ってください。 |
youich | Åê¹ÆNo.11285 投稿日時: 2004-10-4 15:26 |
職人 居住地: kobe 投稿: 349
使用環境:
Tiger |
Re: xmlの読み込みの変数化 引用:
パースの仕方というよりもパース後のデータの持ちかたが ややこしいから、ややこしくなってるんじゃないかと思います。 channel内のデーターを個別の配列としてもつんじゃなくて channel1つを1つのオブジェクトとして、そのオブジェクトの配列(3つ?)を 持つというほうが簡単に済むんじゃないかと思います。 xml自体の解析は単純ですよね?4つヘッダーがあってその後 itemが任意の個数だから、firstChild.childNodesをばーっとみていくだけでいいと思いますよ。 例えばデータロード後のコールバックも入れるとこんな感じでは どうですか?
|
関たかまさ | Åê¹ÆNo.11286 投稿日時: 2004-10-4 15:46 |
常連 居住地: 埼玉 投稿: 61
使用環境:
WinXP Pro(sp1) FlashMX 2004 Pro 7.2 |
Re: ちょっと説明不足でしたでしょうか(^^;) なんかヘンテコな返答しちゃったかもしれないですね
引用: 読み込むだけでもwhileの方がいいのでしょうか?また、今回の場合、whileとfor、どちらも同じかなと思ったのですが、その場合はwhileの方がよいのでしょうか? これについては、意見が分かれるところかもしれないです。 ただ、whileの方が早いっていうのも聞いたことがあったし(スイマセン、自分では検証してません)チェック自体も楽チンなので。 楽チンっていうのはノードが何個あっても大丈夫って意味です。 引用: xmlの中身は同じ構成でテキスト内容が違うだけだと思ってください。 という事であれば、ひとつメソッドを作ってあげるのはどうでしょうか?
みたいな感じかなぁ。。。 もし、属性でデータを表現したら
こんな事もできると思います。 |
afroman | Åê¹ÆNo.11293 投稿日時: 2004-10-4 19:11 |
新米 居住地: 関西 投稿: 4
使用環境:
MAC OSX10.3 Flash MX2004 |
Re: xmlの読み込みの変数化 なるほどー。わかりました.
なんとかこれでいけると思います。 下手にrootにおいたのも敗因の1つだったんですかね^^; やってみます?。 まだまだ初心者なのでわからないことがこれからもたくさん出ると思いますのでまた質問など多々させてもらいますー。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |