Как назначить массив загруженного файла TXT / XML для переменных? - PullRequest
0 голосов
/ 21 ноября 2011

Я использую следующий код flash-скрипта, полученный из интернета, для загрузки файла «Loading.txt»:

var myTextLoader:URLLoader = new URLLoader(); 
 myTextLoader.addEventListener(Event.COMPLETE, onLoaded); 
 function onLoaded(e:Event):void { 
    var myArrayOfLines:Array = e.target.data.split(/\n/,","); 
} 
myTextLoader.load(new URLRequest("Loading.txt"));

В «Loading.txt» данные объекта в строке (Dim1 Dim2 Dim3 OX OY OZ): 60,12,9, -50, -50,50 84,12,9, 50, 50,50

Затем я использую onLoaded [i-1] [j-1] в цикле, чтобы получить данные в строке i и столбце j массива, но я получил сообщение об ошибке. Может ли кто-нибудь помочь мне в этом? Я абсолютно новичок в ActionScript. Цикл, который я использовал, похож на var ArrayRows: int = 2 // как автоматически получить количество строк в текстовом файле?

for(iObj=0;iObj<ArrayRows;iObj++){
    Dim1 = ObjDimArray[iObj][0]
    Dim2 = ObjDimArray[iObj][1]
    Dim3 = ObjDimArray[iObj][2]

    OX = ObjOriginArray[iObj][3]
    OY = ObjOriginArray[iObj][4]
    OZ = ObjOriginArray[iObj][5]
}

Кроме того, кажется, что большинство людей рекомендует использовать xml, и я скомпилировал xml-файл «Loading.xml» для вышеупомянутого «Loading.txt», как показано ниже

<?xml version="1.0" encoding="utf-8"?>
<All>
<Equipment Num="1">
 <Manufacturer>HW</Manufacturer>
 <Length>60</Length>
 <Width>12</Width>
 <Thickness>9</Thickness>

 <OriginX>-50</OriginX>
 <OriginY>-50</OriginY>
 <OriginZ> 50</OriginZ>
</Equipment>

<Equipment Num="2">
 <Manufacturer>HW</Manufacturer>
 <Length>84</Length>
 <Width>12</Width>
 <Thickness>9</Thickness>

 <OriginX>50</OriginX>
 <OriginY>50</OriginY>
 <OriginZ>50</OriginZ>
</Equipment>
</All>

I used following code to load the "Loading.xml". I would like to use a loop to read all values and assign to a variable. Can anybody teach me how to do that?

var myXML:XML = new XML();
var XML_URL:String = "Loading.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
trace("Data loaded.");
}

Спасибо ...

1 Ответ

0 голосов
/ 21 ноября 2011

В ActionScript E4X вам не нужно переназначать значения XML переменной, если она не используется постоянно;и даже тогда, чтобы сохранить поток пользовательского интерфейса.

Расширяя свой метод загрузчика, в качестве примера для доступа к данным, содержащимся в XML, можно использовать следующее:

var equipment:XMLList = xml.Equipment;

var idx:uint;
var item:XML;

for(idx=0; idx<equipment.length(); idx++)
{
    item = equipment[idx];
    trace
    (
        "\n" + "Item(" + item.@Num + "):\n" +
        "Manufacturer:", item.Manufacturer + "\n" +
        "Length:", item.Length + "\n" +
        "Width:", item.Width + "\n" + 
        "Thickness:", item.Thickness + "\n" +
        "OriginX:", item.OriginX + "\n" +
        "OriginY:", item.OriginY + "\n" +
        "OriginZ:", item.OriginZ
    );

}

YouМожно сделать еще один шаг, если предположить, что все элементы оборудования имеют идентификаторы через атрибут «Num», прямой доступ к данным будет следующим:

var myData:XMLList = xml.Equipment.(@Num == 2);
trace(myData.Manufacturer);

Осторожно, что приведенный выше код захватит всеЭлементы «Equipment» с атрибутом Num == 2. Однако вы все равно можете получить доступ к узлу «Производитель», если в результате «myData» содержится несколько тегов «Оборудование», в XMLList будет возвращено несколько узлов «Производитель».

Удачи!

...