XML自动解析器开源
XML自動(dòng)解析器開源咯,
這東西寫出來(lái)很久了,自己也用了很長(zhǎng)時(shí)間,感覺(jué)沒(méi)什么bug了今天才獨(dú)立放出來(lái)。
現(xiàn)在開源這么多,什么GUI,tween的都有了,想來(lái)想去才想出一個(gè)有點(diǎn)新意的東西。隨便取了個(gè)名:asMapper。
先上個(gè)簡(jiǎn)單例子。本例是把一個(gè)xml解析為as的類
xml代碼:
<test>
<hello>worlds</hello>
</test>
新建一個(gè)vo類
package
{
public class TestVO
{
public var hello:String;
}
}
主類構(gòu)造
public var xmlMapper:XmlMapper;
public function TestMapper()
{
var testXML:XML = XML
(
<test>
<hello>worlds</hello>
</test>
);
xmlMapper = new XmlMapper();
// 把TestVO類型注冊(cè)到mapper里面,給它一個(gè)別名test與xml的根節(jié)點(diǎn)對(duì)應(yīng)
xmlMapper.regClz(TestVO,"test");
var obj:TestVO = xmlMapper.fromXML(testXML);
var xmlStr:* = xmlMapper.toXML(obj);
trace(xmlStr);
}
打個(gè)斷點(diǎn)看看:
與xml同名的屬性解析上去了
-----------------------------------------------------------
這個(gè)例子很簡(jiǎn)單,如果想解析對(duì)象里面又有對(duì)象的話,下面上個(gè)復(fù)雜些的例子。
vo類代碼
package
{
public class Test2VO
{
public var helloTest:TestVO;
public var helloObj:Object;
public var helloLs:Array;
}
}
主類測(cè)試代碼:
private function test2():void
{
var testXML:XML = XML
(
<test2>
<helloTest>
<hello>worlds</hello>
</helloTest>
<helloObj>
<attr1>1</attr1>
<attr2>2</attr2>
</helloObj>
<helloLs>
<String>worlds</String>
<int>11</int>
<test>
<hello>worlds2</hello>
</test>
<test>
<hello>worlds3</hello>
</test>
</helloLs>
</test2>
);
xmlMapper = new XmlMapper();
// 把TestVO類型注冊(cè)到mapper里面,給它一個(gè)別名test與xml的根節(jié)點(diǎn)對(duì)應(yīng)
xmlMapper.regClz(TestVO,"test");
xmlMapper.regClz(Test2VO,"test2");
var obj:Test2VO = xmlMapper.fromXML(testXML);
var xmlStr:* = xmlMapper.toXML(obj);
trace(xmlStr);
}
再看看截圖,嘿嘿,解析上去了
------------------------------------------
另外還有一個(gè)引用語(yǔ)法的xml語(yǔ)法例子。
引用語(yǔ)法,先上個(gè)例子,vo類
package
{
public class Test3VO
{
public var test1:TestVO;
public var test2:TestVO;
}
}
斷點(diǎn)看一下,解析成功。
用特效引用字符解析是防止死循環(huán),比如A里面有屬性引用B而B里面又有屬性引用了A,不加方法處理就出錯(cuò)了。adobe官方的json解析是有這個(gè)bug的,大家不防試試。
有個(gè)不完美的地方,就是動(dòng)態(tài)對(duì)象Object里面的屬性我無(wú)法反射出它的屬性的類型.例如<Object><test /></Object>這樣是解析不了的。目前想到的方法只有在節(jié)點(diǎn)里面加一屬性來(lái)表示類型。如果有高手有更好的方法望跟我聯(lián)系。
本解析工具最吃性能的是describeType方法,因?yàn)檫@個(gè)反射,所以會(huì)多消耗幾十個(gè)毫秒。我用了一個(gè)LRU緩存池來(lái)將反射存內(nèi)存,所以只會(huì)在第一次反射時(shí)慢幾十毫秒,第二次之后基本十毫秒之內(nèi)解析完成…… 不過(guò)緩存工具還可能有bug,我并沒(méi)有將它正式放出。
代碼包里面有一個(gè)json的包,暫時(shí)沒(méi)時(shí)間寫了,現(xiàn)在的項(xiàng)目暫時(shí)不用json。真正項(xiàng)目中很多朋友還是用amf,那東西可以用adobe內(nèi)置方法解析。
SVN地址:https://as-mapper.googlecode.com/svn/trunk/as3Mapper
分類:程序人生
標(biāo)簽:as3,xml,解析,mapper
作者:Leo_wl
出處:http://www.cnblogs.com/Leo_wl/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
版權(quán)信息
總結(jié)
以上是生活随笔為你收集整理的XML自动解析器开源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单又含深意的网名,有深意的微信昵称47
- 下一篇: 最霸气微信名大全119个