日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

XML自动解析器开源

發(fā)布時間:2024/1/3 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 XML自动解析器开源 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

XML自動解析器開源咯,

這東西寫出來很久了,自己也用了很長時間,感覺沒什么bug了今天才獨立放出來。
現(xiàn)在開源這么多,什么GUI,tween的都有了,想來想去才想出一個有點新意的東西。隨便取了個名:asMapper。

先上個簡單例子。本例是把一個xml解析為as的類
xml代碼:

<test>
    <hello>worlds</hello>
</test>

新建一個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類型注冊到mapper里面,給它一個別名test與xml的根節(jié)點對應(yīng)
    xmlMapper.regClz(TestVO,"test");
    var obj:TestVO = xmlMapper.fromXML(testXML);
    var xmlStr:* = xmlMapper.toXML(obj);
    trace(xmlStr);
}

打個斷點看看:

與xml同名的屬性解析上去了

-----------------------------------------------------------

這個例子很簡單,如果想解析對象里面又有對象的話,下面上個復(fù)雜些的例子。
vo類代碼

package
{
    public class Test2VO
    {
        public var helloTest:TestVO;
        public var helloObj:Object;
        public var helloLs:Array;
    }
}

主類測試代碼:

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類型注冊到mapper里面,給它一個別名test與xml的根節(jié)點對應(yīng)
    xmlMapper.regClz(TestVO,"test");
    xmlMapper.regClz(Test2VO,"test2");
    var obj:Test2VO = xmlMapper.fromXML(testXML);
    var xmlStr:* = xmlMapper.toXML(obj);
    trace(xmlStr);
}

再看看截圖,嘿嘿,解析上去了

------------------------------------------

另外還有一個引用語法的xml語法例子。
引用語法,先上個例子,vo類

package
{
    public class Test3VO
    {
        public var test1:TestVO;
        public var test2:TestVO;
    }
}

斷點看一下,解析成功。

用特效引用字符解析是防止死循環(huán),比如A里面有屬性引用B而B里面又有屬性引用了A,不加方法處理就出錯了。adobe官方的json解析是有這個bug的,大家不防試試。

有個不完美的地方,就是動態(tài)對象Object里面的屬性我無法反射出它的屬性的類型.例如<Object><test /></Object>這樣是解析不了的。目前想到的方法只有在節(jié)點里面加一屬性來表示類型。如果有高手有更好的方法望跟我聯(lián)系。

本解析工具最吃性能的是describeType方法,因為這個反射,所以會多消耗幾十個毫秒。我用了一個LRU緩存池來將反射存內(nèi)存,所以只會在第一次反射時慢幾十毫秒,第二次之后基本十毫秒之內(nèi)解析完成…… 不過緩存工具還可能有bug,我并沒有將它正式放出。

代碼包里面有一個json的包,暫時沒時間寫了,現(xiàn)在的項目暫時不用json。真正項目中很多朋友還是用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)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
版權(quán)信息

總結(jié)

以上是生活随笔為你收集整理的XML自动解析器开源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。