返回 导航

Flex

hangge.com

AS3 - 将XML格式的数据解析成Object类型

作者:hangge | 2015-02-28 11:33
在Flex/Flash开发中,有时需要将xml类型的数据转换成Object类型来使用。
下面是我封装的一个转换类,能将XML格式数据解析转换成Object对象(XML的子元素也会被递归解析),对于XMLList格式数据则会转换成ArrayCollection(内部元素为Object)
package com.hangge.util
{
	import mx.collections.ArrayCollection;

	public class XMLUtils
	{	
		/**
		 * 将XML格式的数据解析成Object类型
		 * (XML的子元素也会递归解析)
		 */
		public static function parseXMLData(xml:XML):Object{
			if(xml == null){
				return null;
			}
			
			var result:Object = {};			
			result["$Children$"] = new ArrayCollection();
			
			//解析标签名
			result["$NodeName$"] = xml.localName().toString();
			
			//解析属性
			var attNamesList:XMLList = xml.@*;
			var length:int = attNamesList.length();
			for (var i:int = 0; i < length; i++)
			{ 
				var attName:String = attNamesList[i].name().toString();
				var attValue:String = attNamesList[i].toString();
				
				result[attName] = attValue;
			} 
			
			//解析子元素
			for each(var childXML:XML in xml.children()){
				var child:Object = parseXMLData(childXML);
				(result["$Children$"] as ArrayCollection).addItem(child);
			}
			
			return result;
		}
		
		/**
		 * 将XMLList格式的数据解析成Object类型
		 * (XML的子元素也会递归解析)
		 */
		public static function parseXMLListData(xmlList:XMLList):ArrayCollection{
			if(xmlList == null){
				return null;
			}
			
			var result:ArrayCollection = new ArrayCollection();;			
			
			//解析子元素
			for each(var childXML:XML in xmlList){
				var child:Object = parseXMLData(childXML);
				result.addItem(child);
			}
			
			return result;
		}
	}
}
使用方法:
var xml:XML = <data>
                <row id="1" name="李四" age="14"/>
                <row id="2" name="王五" age="16"/>
                <row id="3" name="郑六" age="16"/>
             </data>
var data1:Object= parseXMLData(xml);
var data2:ArrayCollection = parseXMLListData(xml.children()); 
评论

全部评论(0)

回到顶部