`
#天琪#
  • 浏览: 155684 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

AS3:转换XML到Object—-XMLToObject

    博客分类:
  • AS3
阅读更多
转自:http://www.roading.net/blog/?p=204

这是WebService的解析响应数据类,负责转换xml到object,解析的结果可以按照访问object/array的方式访问.
//读取rss的例子 http://www.roading.net/as3/readfeed.swf
import net.roading.*;
import net.roading.data.*;
import net.roading.skin.*;
import net.roading.component.*;

SkinManager.load("FlexSkin.swf",loaded);

function loaded()
{
var titlel = new Label(0,5,550,20,"blog title… wait loaded");
addChild(titlel);
//
var ll = new Label(0,378,50,20,"feed url:");
addChild(ll);
//
var futi = new TextInput(50,378,400,20);
var lbtn = new Button(510,378,30,20,"load");
addChild(futi);
addChild(lbtn);
//
lbtn.addEventListener("click",loadClick);
//
function loadClick(e)
{
var fl:FileLoader = new FileLoader();
fl.loadXml(futi.text);
fl.onLoad = function(xml)
{
//trace(xml);
var o = XMLToObject.to(xml);
//
//trace(o.rss.channel.item.length);
titlel.text = o.rss.channel.title+" — "+o.rss.channel.description;
//
ta.text = o.rss.channel.item[0].description;
//
list.dataProvider = o.rss.channel.item;
}
}
//
var list = new ListBox();
list.move(2,30);
list.size(200,345);
list.labelField = "title";
addChild(list);
//
list.addEventListener("change",listChange);
//
function listChange(e)
{
var o = list.selectedData;
//for(var i in o)
//trace(i,"===",o[i]);
ta.text = o.description;
}
//
var ta = new TextArea(205,30,340,345);
ta.wordWrap = true;
ta.html = true;
addChild(ta);
}

//———————————————————————–
//类实现
package net.roading.data
{
public class XMLToObject
{

public function XMLToObject()
{
}

static public function to(dp:XML,ignoreNamespace:Boolean=false):Object
{
if(dp)
{
var _obj={};
dp.ignoreWhitespace = true;
pNode(dp,_obj,ignoreNamespace);
return _obj;
}
return null;
}

static private function pNode(node,obj:Object,ignoreNamespace:Boolean):void
{
//
if(ignoreNamespace)node.setNamespace("");
//
var nodeName = node.name().toString();
var o:Object = {};
var j;
if(node.attributes().length()>0)
{
for(j in node.attributes())
{
o[node.attributes()[j].name().toString()]=node.attributes()[j];
}
if(node.children().length()<=1&&o["value"]==undefined)
{
o["value"]=node.toString();
}
}
else
{
if(node.children().length()<=1&&!node.hasComplexContent())
{
o=node.toString();
}
}
//——————————
if(obj[nodeName] == undefined)
obj[nodeName] = o;
else
{
if(obj[nodeName] is Array)
obj[nodeName].push(o)
else
obj[nodeName] = [obj[nodeName],o];
}
try{
toObj(node,obj[nodeName],ignoreNamespace);
}catch(e){};
}

static private function toObj(dp:XML,obj:Object,ignoreNamespace:Boolean):void
{
var i,j,nodeName,nl;
nl = dp.children().length();
for(i=0;i {
var node = dp.children()[i];
if(obj is Array)
{
pNode(node,obj[obj.length-1],ignoreNamespace);
}
else
pNode(node,obj,ignoreNamespace);
//
}
}

}
}


分享到:
评论

相关推荐

    as3比较详尽的工具类

    xmlToArray.as ---------------------- xml转换Array util: ArrayUtil.as ---------------------- 数组辅助功能 setFrameout.as ---------------------- 延迟(帧)函数 clearFrameout.as ------------------...

    jQuery完全实例.rar

    在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。 jQuery 代码: $("&lt;div&gt;&lt;p&gt;Hello&lt;/p&gt;...

    jquery电子文档chm

    In most cases you won't need that object to manipulate directly, but it is available if you need to abort the request manually. Note: If you specify the dataType option described below, make sure ...

    freemarker总结

    2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ...

    freemarker语法完整版

    Freemarker页面语法 A 概念 最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该... &lt;#list 1..3 as ...

    Delphi最新三层源码

    以后该业务要变,就十分方便,只需要在中间层的定位器,配置一下就可以了,如果采用XML或文件配置,不需要修改任何程序,客户的业务已经发生改变。当然会采用名字调用等技术了。相关代码如下: TBOService= class...

    jquery-1.1.3 效率提高800%

    It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute). &lt;br&gt;$("a[@rel~=test]")Animation Improvements &lt;br&gt;参数: options 返回值: ...

    整理后java开发全套达内学习笔记(含练习)

    allowing a single object to be seen as having many types. principle n.原则,原理,主义 ['prinsipl] priority n. 优先级 [prai'ɒriti] process n. 程序, 进程 ['prɒses] protected (关键字) 受保护的,私有的 ...

    外文翻译 stus MVC

    The file struts-config.xml instructs ActionServlet on how to use the extended classes. There are several advantages to this approach: • The entire logical flow of the application is in a ...

    ZendFramework中文文档

    Fetching a Row as an Object 10.3. Zend_Db_Profiler 10.3.1. Introduction 10.3.2. Using the Profiler 10.3.3. Advanced Profiler Usage 10.3.3.1. Filter by query elapsed time 10.3.3.2. Filter by ...

    C#本质论(第3版)

    9.5.1 将xml注释与代码构造关联到一起 9.5.2 生成xml文档文件 9.6 垃圾回收 9.7 资源清理 9.7.1 终结器 9.7.2 使用using语句进行确定性终结 9.7.3 垃圾回收和终结 9.7.4 资源利用和终结的指导原则 9.8 延迟...

Global site tag (gtag.js) - Google Analytics