AS3 - 将XML格式的数据解析成Object类型
在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());