2011-11-21 46 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

相关问题