2009-05-04 14 views
0

ここで私のスクリプト全体がわかりますが、どこに問題があるのか​​分からないようです。AS3でXMLを解析する

症状は、私がaddChild(本)を置いた場所が、親指で適切かつ逐次追加される適切な場所ではないということです。結果として、私の驚いたことに、これまでにこれらを表示できる唯一の方法は、何らかの形で左上隅に表示されている間違ったトレース文を書くことです。どんな提案も大歓迎です!ありがとうございました!!

var rowsW:Number; 
var my_xW:Number; 
var my_yW:Number; 
var my_thumb_widthW:Number; 
var my_thumb_heightW:Number; 
var my_imagesW:XMLList; 
var my_totalW:Number; 

var container_mcW:MovieClip; 
var preloaders_mcW:MovieClip; 
var book:TextField = new TextField(); 
var author:TextField = new TextField(); 
var publisher:TextField = new TextField(); 
book.selectable = true; 

var x_counterW:Number = 0; 
var y_counterW:Number = 0; 

var my_tweensW:Array = []; 
var container_mc_tweenW:Tween; 

var myXMLLoaderW:URLLoader = new URLLoader(); 

myXMLLoaderW.load(new URLRequest("WORKS.xml")); 
myXMLLoaderW.addEventListener(Event.COMPLETE, processXMLW); 

createContainerW(); 
callThumbsW(); 

function processXMLW(e:Event):void { 
var myXMLW:XML = new XML(e.target.data); 

rowsW = [email protected]; 
my_xW = [email protected]; 
my_yW = [email protected]; 
my_thumb_widthW = [email protected]; 
my_thumb_heightW = [email protected]; 
my_imagesW = myXMLW.IMAGE; 
my_totalW = my_imagesW.length(); 

myXMLLoaderW.removeEventListener(Event.COMPLETE, processXMLW); 
myXMLLoaderW = null; 

} 

function createContainerW():void { 
container_mcW = new MovieClip(); 
container_mcW.x = my_xW; 
container_mcW.y = my_yW; 
addChild(container_mcW); 


preloaders_mcW = new MovieClip(); 
preloaders_mcW.x = container_mcW.x; 
preloaders_mcW.y = container_mcW.y; 
addChild(preloaders_mcW); 
} 

function callThumbsW():void { 
for (var i:Number = 0; i < my_totalW; i++) { 

    var thumb_urlW = my_imagesW[i][email protected]; 
    book.text = my_imagesW[i][email protected]; 
    author.text = my_imagesW[i][email protected]; 
    publisher.text = my_imagesW[i][email protected]; 

    var thumb_loaderW = new Loader(); 
    thumb_loaderW.load(new URLRequest(thumb_urlW)); 

thumb_loaderW.contentLoaderInfo.addEventListener(Event.COMPLETE,thumbLoadedW); 

    thumb_loaderW.name = i; 

    book.x = (40)*x_counterW; 
    book.y = (my_thumb_heightW+40)*y_counterW; 
    thumb_loaderW.x = (my_thumb_widthW+10)*x_counterW; 
    thumb_loaderW.y = (my_thumb_heightW+10)*y_counterW; 


    container_mcW.addChild(book); 
    container_mcW.addChild(author); 
    container_mcW.addChild(publisher); 
    trace("my x equals" (book.x)); 

    if (y_counterW+1 < rowsW) { 
     y_counterW++; 
    } else { 
     y_counterW = 0; 
     x_counterW++; 
    } 
    var preloader_pbW:ProgressBar = new ProgressBar(); 
    preloader_pbW.source = thumb_loaderW.contentLoaderInfo; 
    preloader_pbW.x = thumb_loaderW.x; 
    preloader_pbW.y = thumb_loaderW.y; 
    preloader_pbW.width = my_thumb_widthW; 
    preloader_pbW.height = my_thumb_heightW; 
    preloaders_mcW.addChild(preloader_pbW); 

    preloader_pbW.addEventListener(Event.COMPLETE, donePbW); 

} 
} 

function thumbLoadedW(e:Event):void { 
var my_thumbW:Loader = Loader(e.target.loader); 
container_mcW.addChild(my_thumbW); 

my_tweensW[Number(my_thumbW.name)]=new Tween(my_thumbW, "alpha", Strong.easeIn, 0,1,0.5, true); 

my_thumbW.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoadedW); 
} 

function donePbW(e:Event):void { 
var my_pbW:ProgressBar = ProgressBar(e.target); 
preloaders_mcW.removeChild(my_pbW); 
my_pbW.removeEventListener(Event.COMPLETE, donePbW); 
} 

答えて

0

XMLの多くのノードからvar iを描画するループの外側にあるTextFieldをインスタンス化するため、私のコードはXMLリストの1つの結果しか表示されません。各ノードのテキストフィールドを正しく表示するには、各var iのTextFieldをインスタンス化する必要があります。このように:

function callThumbsW():void { 
for (var i:Number = 0; i < my_totalW; i++) { 

    var thumb_urlW = my_imagesW[i].thumb; 
    var book = my_imagesW[i].TITLE; 

    var textHolder:TextField = new TextField; 
    container_mcW.addChild(textHolder); 

これは即時の満足感をもたらします。

1

XMLを正しく読み込んでいるとは思われません。 XMLをロードするためのローダーではなく、URLLoaderを使用する必要があります。その後、データを解析してテキストフィールドを追加するためにEvent.COMPLETEがトリガーされるまで待つ必要があります。セフィロスから

http://www.sephiroth.it/tutorials/flashPHP/E4X/):

import flash.net.URLLoader 
import flash.net.URLRequest 
import flash.xml.XML 
import flash.event.* 
import flash.error.* 

var mainXML:XML; 
var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, onComplete); 
loader.load(new URLRequest("http://www.sephiroth.it/tutorials/flashPHP/E4X/files/test.xml")); 


function onComplete(evt:Event) 
{ 
    mainXML = new XML(loader.data) 
    trace("xml loaded, start parsing using E4X syntax"); 
} 

さて、今あなたが大規模なあなたの質問を編集したことを、はい、それはあなたがすでにそこにいることを持って明らかです。私はあなたがXMLに解析しようとしているデータを正確に見るためにxmlオブジェクトに解析しようとする前に、loader.dataを追跡/監視しようとします。おそらく、あなたが期待していないデータがあるようです。

+0

うーん。すでにその部分があった。私はそれをその連続した順序で信じる理由がある。私が答えを見つけたら教えてくれます。ありがとう! – Trip

+0

大量の編集を残念に思って、コメントにコードを配置する方法を理解しました;)私はたくさんのトレースをしてきました。時々、私はそれを垣間見ることができますが、失敗したトレースステートメントでしか見られません。ウィアード?私はこれがどのように機能するか想像できません。 – Trip

+0

まだこれに取り組んでいます。これまで1週間だったので、何かを打ち破ることはできませんでした。 XML属性の解析に関するすべての単一のURLを読みましたが、これを把握することはできません。 – Trip