转自: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);
//
}
}
}
}
分享到:
相关推荐
xmlToArray.as ---------------------- xml转换Array util: ArrayUtil.as ---------------------- 数组辅助功能 setFrameout.as ---------------------- 延迟(帧)函数 clearFrameout.as ------------------...
在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。 jQuery 代码: $("<div><p>Hello</p>...
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 ...
2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ...
Freemarker页面语法 A 概念 最常用的 3 个概念 sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该... <#list 1..3 as ...
以后该业务要变,就十分方便,只需要在中间层的定位器,配置一下就可以了,如果采用XML或文件配置,不需要修改任何程序,客户的业务已经发生改变。当然会采用名字调用等技术了。相关代码如下: TBOService= class...
It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute). <br>$("a[@rel~=test]")Animation Improvements <br>参数: options 返回值: ...
allowing a single object to be seen as having many types. principle n.原则,原理,主义 ['prinsipl] priority n. 优先级 [prai'ɒriti] process n. 程序, 进程 ['prɒses] protected (关键字) 受保护的,私有的 ...
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 ...
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 ...
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 延迟...