2014-02-14 4 views
0

Я чрезвычайно новичок в AS3 и, похоже, над моей головой.AS3/XML - не удается динамически получить доступ к xml

Я пытаюсь заставить сценарий вытащить другой .xml-файл в зависимости от того, что было выбрано из созданного массивом меню на предыдущей сцене. Хотя я бы хотел, чтобы это было более гибким, я готов просто создать оператор «if», чтобы выбрать .xml, но я не могу отслеживать переменную, которая будет меняться в зависимости от выбранного пункта меню.

Вот что я сейчас работаю. Это гибкая версия (у меня все еще есть надежда). Как я уже сказал, я очень новичок в этом, и если вам нужно увидеть больше, чтобы получить лучшую картину, дайте мне знать.

var item_list = new Array(); 
var i:Number; 
var total:Number; 

var find_xml:XML = new XML(); 

// This part is what pulls from the frame that this is placed on 
// The as3 script on the frame --- "page_2.load_xml("enter xml file");" 
function push_array(e:Event):void{ 
    find_xml = XML(e.target.data); 
    total = find_xml.item.length(); 
    for(i = 0; i < total; i++){ 
    item_list.push({ content: find_xml.item[i].content.toString() }); 
    } 
} 

function load_xml(xml_file:String):void{ 
    var xml_loader:URLLoader = new URLLoader(); 
    xml_loader.load(new URLRequest(xml_file)); 
    xml_loader.addEventListener(Event.COMPLETE, push_array); 
} 

//Here is where the variable holding the .xml will go 
var xml_file:String = place variable with .xml file name here; 

Благодарим за любую помощь!

---- ДОБАВЛЕНО: Вот оставшийся код ----

try{ 
    var key_str:String; 
    var value_str:String; 
    var param_obj:Object = LoaderInfo(this.root.loaderInfo).parameters; 
    for (key_str in param_obj){ 
    value_str = String(param_obj[key_str]); 
    if(key_str == "xml_file") 
     xml_file = value_str; 
    break; 
    } 
} 
catch (error:Error) {} 

touch_slider.load_gallery(xml_file); 

import flash.net.URLRequest; 
import flash.ui.ContextMenu; 

var menu:ContextMenu = new ContextMenu(); 
var copyright:ContextMenuItem = new ContextMenuItem(""); 
var credit:ContextMenuItem = new ContextMenuItem("");\ 

menu.hideBuiltInItems(); 
menu.customItems.push(copyright, credit); 
this.contextMenu = menu; 

function visit(e:Event){ 
var my_link:URLRequest = new URLRequest(""); 
navigateToURL(link, "_self"); 
} 

function visit_bar_slider(e:Event){ 
var my_link:URLRequest = new URLRequest(""); 
navigateToURL(my_link, "_parent"); 
} 
+0

SO этот код загружает файл XML и помещает его потомков в массиве. Мне кажется. Не могли бы вы лучше объяснить, с чем у вас проблемы? – BoppreH

+0

Не могли бы вы поделиться кодом, который показывает, как вы называете функцию load_xml()? –

+0

Если я помещаю .xml прямо в (поэтому он читает var xml_file: String = "my_list.xml"), все работает. То, что я надеюсь сделать, это переменная, которая заполняет «xml_file» изменение. – user3311335

ответ

0

Редактировать файл XML так:

<?xml version="1.0" encoding="utf-8"?> 
<photos> 
    <config auto_play="true" auto_play_duration="5" slide_direction="left" tween_duration="0.5" tween_effect="easeInOutQuad"/> 
    <photo> 
     <filename>photos/ninki.jpg</filename> 
     <target>_self</target> 
    </photo> 
    <photo> 
     <filename>photos/richmond_station.jpg</filename> 
     <target>_self</target> 
    </photo> 
</photos> 

И использовать эту функцию, чтобы вывести их в массив

var photolinks:Array = new Array(); 
var phototargets:Array = new Array(); 

function pullXMLtoArray(xml:XML):void 
{ 
    var auto_play = [email protected]_play; //a sample for pulling settings 
    var photolist:XMLList = xml.photo; 
    var photo:XML; 
    for each (photo in photolist) 
    { 
     photolinks.push(String(photo.filename)); 
     phototargets.push(String(photo.target)); 
    } 
} 

Итак, теперь у вас есть 2 разных массивов, один для Фотоссылки, другой для фотомишенях ...

Фотоссылки [1] & фотомишенях [1] принадлежат к одной фотографии узла

Смежные вопросы