AS3로 XML을 구문 분석합니다
-
03-07-2019 - |
문제
문제가 어디에 있는지 알 수없는 것처럼 내 전체 대본이 있습니다.
증상은 내가 추가하는 곳 (책)이 엄지 손가락과 함께 올바르게 그리고 순차적으로 추가하기에 적절한 장소가 아니라는 것입니다. 결과적으로, 놀랍게도, 내가 지금까지 나타나게 할 수있는 유일한 방법은 왼쪽 상단에 팝업되는 잘못된 추적 진술을 작성하는 것입니다. 모든 제안은 대단히 감사하겠습니다! 고맙습니다!!
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 = myXMLW.@ROWS;
my_xW = myXMLW.@XPOSITION;
my_yW = myXMLW.@YPOSITION;
my_thumb_widthW = myXMLW.@WIDTH;
my_thumb_heightW = myXMLW.@HEIGHT;
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].@THUMB;
book.text = my_imagesW[i].@TITLE;
author.text = my_imagesW[i].@AUTHOR;
publisher.text = my_imagesW[i].@PUBLISHER;
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);
}
해결책 2
내 코드가 XML 목록에서 하나만 표시 한 이유는 XML의 많은 노드에서 var I을 그릴 수있는 루프 외부의 텍스트 필드를 인스턴스화하기 때문입니다. 각 노드에 대한 텍스트 필드를 올바르게 표시하려면 각 var i의 텍스트 필드를 인스턴스화해야합니다. 이와 같이 :
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);
이것은 즉각적인 만족을 유발합니다.
다른 팁
XML을 올바르게로드하고있는 것 같습니다. XML을로드하기 위해 로더가 아닌 urlloader를 사용해야합니다. 그런 다음 til event event.com을 기다려야합니다.
세피로스에서 (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 객체에 구문 분석을 시도하기 전에 Loader.Data를 추적/시청하려고 시도합니다. 당신이 기대하지 않는 데이터를 얻는 것 같습니다.
제휴하지 않습니다 StackOverflow