论坛首页 编程语言技术论坛

遍历xml过程中,关于属性的作用域问题,不甚感激!

浏览 3442 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-07-26  

需求是这样的:
有一个xml文件,我需要将xml中的数据遍历成对象并放在数组中,这一点做到了,但此数组内的数据在其他方法不存在,很是疑惑,请XDJM帮忙,谢谢了!

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:flex="http://www.adobe.com/2006/fc" 
	layout="absolute" creationComplete="startup()">
	<flex:SpringGraph id="springGraph" bottom="0" top="0" right="0" left="0" backgroundColor="#666666" 
		dataProvider="{graph}" itemRenderer="myItemRenderer"/>
		
	<mx:Script>
		<![CDATA[
			import com.adobe.flex.extras.controls.springgraph.Graph;
			import mx.controls.Alert;
			
			private var graph:Graph = new Graph();
			private var nodeArr:Array = new Array();
			private var edgeArr:Array = new Array();
			
			//初始化
			public function startup():void{
				loadXml();
				Alert.show("nodeArr length:" + nodeArr.length);//nodeArr length:0(疑惑的地方)
				Alert.show("edgeArr length:" + edgeArr.length);//edgeArr length:0(疑惑的地方)
			}
			
			//加载xml文件
			public function loadXml():void{
				var loader:URLLoader = new URLLoader();
				loader.dataFormat = URLLoaderDataFormat.TEXT;
				loader.addEventListener(Event.COMPLETE,createArr);//注入createArr方法
				loader.load(new URLRequest("cfg/myItemLine.xml"));
			}
			
			//遍历xml文件,并未nodeArr、edgeArr赋值
			public function createArr(event:Event):void{
				var x:XML = new XML(event.target.data);
				for(var nodeStr:String in x.Node){
					var id:String = x.Node[nodeStr].@id;
					var name:String = x.Node[nodeStr].@name;
					var ip:String = x.Node[nodeStr].@ip;
					var netno:String = x.Node[nodeStr].@netno;
					
					var node:Node = new Node();
					node.setId(id);
					node.setName(name);
					node.setIp(ip);
					node.setNetno(netno);
					
					nodeArr.push(node);
				}
				for(var edgeStr:String in x.Edge){
					var fromId:String = x.Edge[edgeStr].@fromId;
					var toId:String = x.Edge[edgeStr].@toId;
					var fromNetno:String = x.Edge[edgeStr].@fromNetno;
					var toNetno:String = x.Edge[edgeStr].@toNetno;
					
					var edge:Edge = new Edge();
					edge.setFromId(fromId);
					edge.setToId(toId);
					edge.setFromNetno(fromNetno);
					edge.setToNetno(toNetno);
					
					edgeArr.push(edge);
				}
				Alert.show("nodeArr length:" + nodeArr.length);//nodeArr length:11(正确的地方)
				Alert.show("edgeArr length:" + edgeArr.length);//edgeArr length:12(正确的地方)
			}
		]]>
	</mx:Script>
</mx:Application>

 

xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<graph>
	<!-- 节点 -->
	<Node id="0" name="设备11" ip="192.168.10.101" netno="1"/>
	<Node id="1" name="设备12" ip="192.168.10.102" netno="1"/>
	<Node id="2" name="设备13" ip="192.168.10.103" netno="1"/>
	<Node id="3" name="设备21" ip="192.168.20.101" netno="2"/>
	<Node id="4" name="设备22" ip="192.168.20.102" netno="2"/>
	<Node id="5" name="设备31" ip="192.168.30.101" netno="3"/>
	<Node id="6" name="设备32" ip="192.168.30.102" netno="3"/>
	<Node id="7" name="设备41" ip="192.168.40.101" netno="4"/>
	<Node id="8" name="设备42" ip="192.168.40.102" netno="4"/>
	<Node id="9" name="设备51" ip="192.168.50.101" netno="5"/>
	<Node id="10" name="设备52" ip="192.168.50.102" netno="5"/>
		
	<!-- 关系 -->
	<Edge fromId="0" toId="1" fromNetno="1" toNetno="1"/>
	<Edge fromId="0" toId="2" fromNetno="1" toNetno="1"/>
	<Edge fromId="1" toId="2" fromNetno="1" toNetno="1"/>
	<Edge fromId="0" toId="1" fromNetno="2" toNetno="2"/>
	<Edge fromId="0" toId="1" fromNetno="3" toNetno="3"/>
	<Edge fromId="0" toId="1" fromNetno="4" toNetno="4"/>
	<Edge fromId="1" toId="3" fromNetno="1" toNetno="2"/>
	<Edge fromId="2" toId="5" fromNetno="1" toNetno="3"/>
	<Edge fromId="2" toId="8" fromNetno="1" toNetno="4"/>
	<Edge fromId="5" toId="8" fromNetno="3" toNetno="4"/>
	<Edge fromId="9" toId="10" fromNetno="5" toNetno="5"/>
	<Edge fromId="4" toId="9" fromNetno="2" toNetno="5"/>
</graph>

 

 

本人是flex新手,请XDJM帮忙解答疑惑,不甚感激,谢谢了

   发表时间:2008-07-26  
不甚感激,就是不是很感激的意思。
0 请登录后投票
   发表时间:2008-07-27  
没人解答吗?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics