AS3:转换XML到Object—-XMLToObject

转自:http://www.roading.net/blog/?p=204

这是WebService的解析响应数据类,负责转换xml到object,解析的结果可以按照访问object/array的方式访问.
[code]//读取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);
}
[/code]
[code]//———————————————————————–
//类实现
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);
//
}
}

}
}[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值