2011-11-21 49 views
0

我用以下閃光的ActionScript代碼,從網上得到的,加載「Loading.txt」文件:如何將加載的txt/xml文件的數組分配給變量?

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 //如何自動獲取txt文件的行數?

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."); 
} 

謝謝...

回答

0

使用Actionscript E4X,除非持續使用XML值,否則不必將XML值重新分配給變量;即使如此,它保留了UI線程。

擴展您的裝載方法,以下可以作爲例子來訪問包含在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(" + [email protected] + "):\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 
    ); 

} 

你可以一步藉此,如果假設所有設備元素有ID的通過「民」的屬性,直接訪問數據將如下所示:

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

當心,上面的代碼將抓住與屬性的所有「裝備」元素民== 2,您仍然可以訪問但是製造商節點,如果有多個設備ta包含在「myData」結果中的gs,您將在XMLList中返回多個Manufacturer節點。

祝你好運!

+0

感謝您的有用答覆。我仍然收到使用以下代碼的錯誤消息: – user1051007

+0

Dim1 = trace(myXML.Equipment [iObj] .Length); Dim35 = trace(myXML.Equipment [iObj] .Width); Dim35 = trace(myXML.Equipment [iObj] .Thickness);或者\t Dim1 = trace(myXML.Equipment。(@ Num == iObj).Length); \t Dim2 = trace(myXML.Equipment。(@ Num == iObj).Width); Dim35 = trace(myXML.Equipment。(@ Num == iObj).Thickness);錯誤消息說錯誤#1067:將一個String類型的值隱式強制爲一個不相關的類型Number。我定義了變量var Dim1:Number; var Dim2:Number; var Dim3:Number; var OX:Number; var OY:Number; var OZ:Number;你知道爲什麼嗎?謝謝... – user1051007

相關問題