Actionscript 3: How to use describeType() to Save an Object to XML

本文介绍如何使用ActionScript 3的describeType()方法实现对象到XML字符串的转换及反向操作,提供了具体实现代码并展示了实际应用案例。

Actionscript 3: How to use describeType() to Save an Object to XML

Needed Resources:

Final Product:
A base data holder class that will have a toXMLString() method and a parseXML() method to give its descendants the ability to generate a XML string or to instantiate themselves with a XML string.

Execution:

  1. After creating the class file
    and constructor, create the toXMLString method:


public function toXMLString():String{

var x:XML = describeType(this);
var xl:XMLList = x..variable;
var xmlStr:String = "";
xmlStr ="<object type=/""+ getQualifiedClassName(this)
+"/">/r";

for each(var n:XML in xl){

xmlStr += "<variable name=/"" +
n.@name.toString() + "/" type=/"" + n.@type.toString() +
"/">";
xmlStr += this[n.@name.toString()].toString();
xmlStr += "</variable>/r";

}

xmlStr += "</object>";
return xmlStr;

}

This method first starts out by using the describeType utility function
to get a XML object that describes the object. Using e4x, a XMLList is
populated with variable nodes. After creating the root node, the method loops
through the XMLList and creates a series of new variable nodes that have the
actual variable value in addition to data type and variable name.

  1. Next, create the
    "parseXML" method:

public
function parseXML(s:String):void{

try{

var x:XML =
new XML(s);

var xl:XMLList = x..variable;
if(xl.length() == 0){

throw("DataObj
Error: XML does not contain any variable nodes.");

}else{

for each(var
n:XML in xl){

var
varNameStr:String = n.@name;

var varTypeStr:String = n.@type;
var varValueStr:String = n.toString();

if(hasOwnProperty(varNameStr) == true){

try{

this[varNameStr] = varValueStr;


}catch(e:Error){

switch(varTypeStr){

case "Array":

this[varNameStr] =
varValueStr.split(",");

break;

default:

throw("DataObj Error: Conversion of " +
varValueStr + " to " + varTypeStr + " failed for variable "
+ varNameStr + ". /r" + e.message);

break;

}

}

}else{

throw("DataObj Error: XML contains a variable
node that is not a class variable.");

}

}

}

}catch(e:Error){

throw(e.message);

}

}

This method starts off by attempting to parse the
passed string to XML. If there are any problems it throws an exception. Another
exception is thrown if the XMLList of variable nodes doesn't have any elements.
After extracting the variable name, type, and value, the class is tested to see
if it does indeed contain a property of that name. If all is well, the property
is assigned. An exception again will be thrown if there is a problem assigning
the property. In this example, the method does one last check to see if the
variable is an array. If so, appropriate action is taken.

  1. A developer can now extend
    off of this class and declare unique properties while retaining these
    handy methods. For example:

package com.tw.model
{

public class Person extends DataObj
{

public var firstName:String;
public var lastName:String;
public var age:Number;
public var favoriteColors:Array = ["blue", "green",
"red"];

public function Person():void{

}

}

}

In this particular example, the simple data holder
class has been named "DataObj" and extended. A developer can do the
following:

var p:Person = new Person();
p.firstName = "Ben";
p.lastName = "Bishop";
p.age = 27;

When p.toXMLString() is invoked the following is
returned:

<object
type="com.tw.model::Person">

<variable name="lastName"
type="String">Bishop</variable>
<variable name="favoriteColors"
type="Array">blue,green,red</variable>
<variable name="age"
type="Number">27</variable>
<variable name="firstName"
type="String">Ben</variable>

</object>

 

Conversly, a developer can have another class
extend DataObj:

package com.tw.model
{

public class Car extends DataObj
{

//props
public var horsepower:Number;
public var numberOfCylinders:Number;
public var model:String;
public var features:Array;
//constructor
public function Car():void{

}

}

}

This object code be instantiated with the following
code:

var c:Car = new Car();
var xmlStr:String = "<object
type=/"com.tw.model::Car/">";
xmlStr += "<variable name=/"model/"
type=/"String/">";
xmlStr += "Honda Civic";
xmlStr += "</variable>";
xmlStr += "<variable name=/"numberOfCylinders/"
type=/"Number/">";
xmlStr += "4";
xmlStr += "</variable>";
xmlStr += "<variable name=/"features/"
type=/"Array/">";
xmlStr += "power windows, power locks, ABS";
xmlStr += "</variable>";
xmlStr += "</object>";
c.parseXML(xmlStr);

Pretty neat, eh?

What this cold be used for:

  • Saving program states to the
    hard drive via AIR for later retrieval. An example of reading and writing
    XML files can be found here .
  • A quick way to save an object
    to a database through a webservice for later use.
  • A method to save data to an
    AIR SQLLite DB.

Source code for this example can be found attached to this post. Comments
about how to improve and make this more useful is STRONGLY encouraged!

 

http://tdotblog.info/?q=node/11

内容概要:本文研究了基于CNN-BiGRU-Attention混合神经网络模型的风电功率预测方法,旨在提升风力发电功率预测的准确性。该模型融合卷积神经网络(CNN)以提取输入变量中的局部时空特征,结合双向门控循环单元(BiGRU)充分捕捉时间序列前后向的长期依赖关系,并引入注意力机制(Attention)动态加权关键时间步的特征信息,增强模型对重要时刻的敏感度。研究采用多变量输入进行单步预测,综合纳入风速、风向、温度等多种气象因素作为模型输入,全面反映环境变量对风电输出的影响。通过Matlab平台完成模型构建、训练与仿真验证,实验结果表明该混合模型在预测精度与稳定性方面优于传统单一模型,有效提升了风电功率预测性能。; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事新能源发电预测、电力系统调度、智能算法应用等相关领域的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于风电场实际运行中的短期功率预测,提高电网调度的安全性与可再生能源消纳效率;②为深度学习模型在复杂时序预测任务中的设计与优化提供实践范例,推动AI技术在能源系统智能化中的深度融合;③支持学术研究复现、课程项目设计与教学演示,帮助深入理解CNN、BiGRU与Attention机制的协同建模范式与实现细节。; 阅读建议:建议结合提供的Matlab代码进行动手实践,重点关注数据预处理流程、模型网络结构设计、超参数调优及训练收敛过程,鼓励尝试替换输入变量组合、调整网络层数或优化注意力结构,以进一步探究模型性能边界并提升预测鲁棒性。
内容概要:本文研究了基于Benders分解算法与输电网-配电网运营商(TSO-DSO)协调机制的双层优化模型,旨在有效应对新能源出力波动、负荷不确定性等对现代电力系统运行带来的挑战。模型上层由输电网运营商(TSO)负责全局资源优化与主网稳定性调控,下层由多个配电网运营商(DSO)实现本地分布式能源的灵活调度,通过Benders分解实现上下层之间的迭代协调与信息交互,从而在保障系统安全的前提下提升整体运行的经济性与鲁棒性。研究提供了完整的Matlab代码实现,涵盖数学建模、算法求解、收敛性分析及仿真结果可视化等环节,有助于深入理解双层优化架构在输配电网协同调度中的具体应用与技术细节。; 适合人群:具备电力系统分析、优化理论基础及一定Matlab编程能力的研究生、科研人员,以及从事电网调度、能源系统规划等相关领域的工程技术人员。; 使用场景及目标:①掌握Benders分解在电力系统双层优化问题中的建模与求解流程;②理解TSO-DSO协同机制下输配电网交互建模的核心思想与实现方法;③复现并拓展高水平学术论文中的优化模型,服务于科研项目攻关或实际工程仿真需求。; 阅读建议:建议结合凸优化理论、电力系统经济调度与Benders分解原理进行系统学习,优先运行并调试所提供的Matlab代码,调整关键参数以观察算法收敛行为与模型性能变化,从而深化对协调机制与优化机理的理解。
内容概要:本文档是一份关于经济学期刊论文复现的研究资料,聚焦核心议题“数字化转型能否促进企业的高质量发展”。文档构建了一个完整的量化分析框架,基于中国上市公司数据,实证探讨数字化转型对企业全要素生产率(TFP)及高质量发展的实际影响。内容涵盖数字化转型指标的构建、企业高质量发展评价体系的设计、计量经济模型的选择与应用(如固定效应模型、GMM方法),并提供Matlab代码实现全过程,包括数据处理、模型估计与稳健性检验。研究还系统梳理了OL、FE、LP、OP、GMM等多种全要素生产率的测算方法,为读者复现高水平经济学论文、深入理解数字经济时代的企业发展路径与政策含义提供了详尽的技术支持与理论指导。; 适合人群:具备扎实的经济学理论基础和较强的定量分析能力,熟悉Matlab或Python编程语言,正在从事经济管理、产业经济或数字经济等领域研究的研究生、高校教师及科研机构研究人员。; 使用场景及目标:①完整复现经济学顶刊论文的实证研究流程,掌握规范的学术研究范式;②学习并应用数字化转型与企业绩效间的因果识别策略,提升独立开展实证研究的能力;③为撰写学位论文、申报科研课题或编制政策咨询报告中涉及数字经济效应的章节提供直接的方法论参考和代码支持; 阅读建议:建议读者务必结合文档提供的数据与Matlab代码进行同步实操,重点钻研变量定义、模型设定、内生性处理和稳健性检验等关键环节,通过反复调试与验证,深刻领会高水平实证研究的严谨逻辑与技术细节,从而全面提升自身的科研素养与论文写作水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值