将属性的XML解析成对象数组列表

在AS3中,XML类基于E4X标准,我们可以直接将元素的XML解析成对象数组列表,然而元素的XML一般比较大,出于效率或是二次的开发原因,很多时候会采用属性的XML。属性的XML需要重新解析成对象数组列表,为了方便工作,我特意写了一个类。

源码如下:

package utils {
  import flash.events.Event;
  import flash.events.EventDispatcher;
  import flash.net.URLLoader;
  /**
   * @author Flying
   */
  public class XMLParser extends EventDispatcher {
    public var parsedData : Array;
    public static  const PARSE : String = "parse";
    /**
     * @param loader 加载器
     */
    public function XMLParser(loader : URLLoader) {
      loader.addEventListener(Event.COMPLETE, completeHandler);
    }
    public function completeHandler(event : Event) : void {
      var item_xmlList : XMLList = XML(URLLoader(event.target).data).children();
      var xmlObj_array : Array = new Array();
      var item_xml : XML;
      for each (item_xml in item_xmlList) {
        var tempObj : Object = new Object();
        var node : XML;
        for each (node in item_xml.attributes()) {
          //用localName方法获取XML对象的限定名称 
          var obj : Object = node.localName();
          tempObj[obj] = item_xml.@[obj];
        }
        xmlObj_array.push(tempObj);
      }
      parsedData = xmlObj_array;
      dispatchEvent(new Event(XMLParser.PARSE));
    }
  }
}

此类基于EventDispatcher类,构造时以URLLoader对象作为参数,当XML解析完后会派发PARSE事件,并将得到的对象数组列表作为事件对象的属性传递。

发表评论