Как загрузить динамически генерируемый XML-файл PHP в FLASH

Вопрос обновлен для Bounty

Во Flash мне нужно загрузить динамически созданный XML-файл, который создается с помощью PHP.

Я использую библиотеку [Bulk-loader library] [1] для всей моей загрузки.

В настоящее время моя Flash может загружать только созданный вручную XML-файл, мне нужна Flash, чтобы загрузить загружаемый PHP-файл XML следующим образом:
— Удаленный XML-путь —

Когда я тестирую фильм во Flash, используя этот XML-файл с PHP, он будет работать, однако проблема заключается в том, что я пытаюсь либо тестировать локально на HTML-странице, либо в Интернете. Flash не отображает полностью из-за некоторой проблемы с получением данных из XML.

Вот некоторые ссылки, чтобы показать, где я сейчас:

[FLASH с использованием созданного вручную XML-файла] [2]
^ Использует: [XML-файл] [3]

[Flash с использованием PHP-файла XML] [4]
^ Использует: [PHP-файл XML] [5]

Я просмотрел Wiki Bulk-loader о том, как загрузить файл PHP и загрузить информацию о типе и нашел это: [ http://code.google.com/p/bulk-loader/][6]

bulkInstance.add("http://mysite.com/top-ten.php", {type:"text"}); bulkInstance.add("http://mysite.com/top-ten.php", {type:"xml"}); bulkInstance.add("http://mysite.com/top-ten.php", {type:"image"}); 

Фрагменты кода

Вот мой текущий код, который загружает XML-файл:
« theXML » получается из FlashVars из HTML

 private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; theXML = this.loaderInfo.parameters.theXML; loader = new BulkLoader("bulky"); loader.logLevel = BulkLoader.LOG_INFO; loader.addEventListener(BulkLoader.COMPLETE, onBulkLoadComplete); loader.addEventListener(BulkLoader.PROGRESS, onBulkLoadProgress); /* ------------------------------------------- TESTING */ //Below is manual XML, works when tested local & online //loader.add("client_user.xml",{id:"xmldata"}); //Below uses PHP generated XML, works when tested in Flash, but no where else //loader.add("--- XML path removed ---",{id:"xmldata", type:"xml", maxTries: 6, preventCache:true}); /* ------------------------------------------- LIVE */ //loader.add(theXML,{id:"xmldata"}); loader.add(theXML,{id:"xmldata", type:"XML", maxTries: 6, preventCache:true}); loader.start(); } 

код onBulkLoadComplete

 private function onBulkLoadComplete(e:Event):void { trace("[BulkLoader] COMPLETE"+"\r"); Global.xml = loader.getXML("xmldata"); HEX = Global.xml.config.hex.toString(),{id:"hex"}; globalWidth = Global.xml.config.width.toString(); globalHeight = Global.xml.config.height.toString(); videoHeight = (globalHeight - (thumbMenuH + videoY + spacedBtn)); controlsY = (videoHeight + videoY); trace("············· Config ·············"); //trace(" HEX = "+HEX); //trace(" globalWidth = "+globalWidth); //trace(" globalHeight = "+globalHeight); //trace("··································"); //trace("\r"); // ------------------------------------------------------ XML ARRAY var x, i; for(x in Global.xml.tab) { for(i in Global.xml.tab[x].vid) { videos.push(Global.xml.tab[x].vid[i].@flv); thumbTitles.push(Global.xml.tab[x].vid[i].@title); thumbPaths.push(Global.xml.tab[x].vid[i].@thumb); } } // ------------------------------------------------------ XML ARRAYS videoName = videos[0]; // Current video is the 1st video drawBackground(); drawVideo(); drawControls(); drawTabMenu(); // -------------------------------- FIND DEFAULT IMAGE/VIDEO TO LOAD for(x in Global.xml.tab) { for(i in Global.xml.tab[x].vid) { if (Global.xml.tab[x].vid[i].@default == "true") { //override any flv qued in the display firstTitle = Global.xml.tab[x].vid[i].@title; vd.flvPath = Global.xml.tab[x].vid[i].@flv; //load the default thumbnail loader = new BulkLoader("thumb"); loader.addEventListener(BulkLoader.COMPLETE, onThumbComplete); loader.add(new URLRequest(Global.xml.tab[x].vid[i].@thumb),{id:"defaultThumbnail"}); loader.start(); break; } } } } 

Код HTML Код для вставки:

 <div> <h2>Testing TEN player on external domain</h2> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="301" height="353"> <param name="movie" value="http://www.domain1.com/N/N.swf"> <param name="quality" value="high"> <param name="flashVars" value="theXML=http://dev.domain2.com/admin2/client.php?id=2" /> <embed src="http://www.domainname.com/N/N.swf" flashVars="theXML=http://dev.domain2.com/admin2/client_user.php?id=2" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="301" height="353"> </embed> </object> </div> 

Вопрос:

1) Как загрузить динамически созданный XML-файл, который заканчивается на .php во Flash, и корректно отображать Flash в HTML

ОБНОВИТЬ

Мы получили Flash для чтения XML-файла, созданного PHP, однако мы можем просматривать только рабочие результаты, когда мы «тестируем фильм» изнутри Flash. Когда мы пытаемся заставить его работать на HTML-странице локально или онлайн, он не будет отображаться правильно.

С вашего вывода:

 Error #1088: The markup in the document following the root element must be well-formed. 

Похоже, что проблема связана не с загрузчиком, а с выходом PHP. Убедитесь, что ваш вывод выглядит так, как ожидалось, путем обращения к сгенерированному XML непосредственно из вашего браузера и его загрузке. Вы можете обнаружить ошибку в выходе, если вы проходите ее в текстовом редакторе по очереди, или вы можете попробовать использовать XML-редактор и посмотреть, не обнаружены ли проблемы.

Вы уверены, что вы поместили type:"XML" в add к bulkloader в вашем онлайн-тесте TEN.swf, так как у меня ошибка при запуске из вашего файла PHP?

Редактировать:

Чтение байт-кода из предыдущего TEN.swf показывает, что тип xml не был помещен:

 0x000076 [ 0xd0 ] GetLocal0 0x000077 [ 0x66 ] GetProperty QName(PrivateNamespace(""), "theXML") 0x00007a [ 0x2c ] PushString "id" 0x00007d [ 0x2c ] PushString "xmldata" 0x000080 [ 0x55 ] NewObject 1 0x000082 [ 0x4f ] CallPropVoid QName(PackageNamespace(""), "add"), 2 

Теперь, похоже, работает и показано, что байт-код показывает, что был добавлен xml-тип

 0x000076 [ 0xd0 ] GetLocal0 0x000077 [ 0x66 ] GetProperty QName(PrivateNamespace(""), "theXML") 0x00007a [ 0x2c ] PushString "id" 0x00007d [ 0x2c ] PushString "xmldata" 0x000080 [ 0x2c ] PushString "type" <===== here it is now 0x000083 [ 0x2c ] PushString "xml" <===== 0x000086 [ 0x2c ] PushString "maxTries" 0x000089 [ 0x24 ] PushByte 0x6 0x00008b [ 0x2c ] PushString "preventCache" 0x00008e [ 0x26 ] PushTrue 0x00008f [ 0x55 ] NewObject 4 0x000091 [ 0x4f ] CallPropVoid QName(PackageNamespace(""), "add"), 2 

попробуйте поместить этот код в первую строку вашего php-файла:

 header ("content-type: text/xml");