チェンジセット 171

差分発生行の前後
無視リスト:
コミット日時:
2007/12/20 22:20:12 (1 年前)
コミッタ:
Mk-10
ログメッセージ:

arrayTags属性を追加

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as2/XMLParser/src/jp/cellfusion/xml/ArrayExtend.as

    r170 r171  
    44class jp.cellfusion.xml.ArrayExtend extends Array  
    55{ 
     6         
    67        function __resolve(name:String):Object { 
    78                var temp:Array = new ArrayExtend(); 
  • as2/XMLParser/src/jp/cellfusion/xml/XMLParser.as

    r170 r171  
    11import jp.cellfusion.xml.ArrayExtend; 
     2import jp.cellfusion.utils.ArrayUtil; 
    23/** 
    34 * @author Makoto Matsutake(cellfusion.jp) 
    45 * XMLを解析してXMLの構造を参考にしたObjectに変換するクラスです。 
    56 */ 
    6 class jp.cellfusion.xml.XMLParser { 
     7class jp.cellfusion.xml.XMLParser 
     8
     9        private static var arrayTags:Array; 
    710         
    811        /** 
     
    1215         * import jp.cellfusion.xml.XMLParser 
    1316         *  
    14          * var xml:XML = new XML("<xml>" + 
     17         * var xml:XML = new XML("<xml arrayTag='img,person'>" + 
    1518         *     "<person age='18'>" + 
    1619         *         "<name><![CDATA[name1]]></name>" + 
     
    4346        { 
    4447                var rootNode:XMLNode = xml.firstChild; 
     48                 
     49                // 強制配列変換するノード名を格納する 
     50                arrayTags = rootNode.attributes.arrayTags.split(","); 
     51                trace("arrayTags:"+arrayTags); 
     52                 
    4553                var result:Object = parse(rootNode); 
    4654                return result; 
     
    8795                                else if (childTag.nodeType == 1) 
    8896                                { 
    89                                         if (obj.attributes.type == "Array"
     97                                        if (obj[childTagName] == null
    9098                                        { 
    91                                                 obj[childTagName] = new ArrayExtend(); 
    92                                         } 
    93                                         else if (obj[childTagName] == null) 
    94                                         { 
    95                                                 obj[childTagName] = parse(childTag); 
     99                                                // arrayTagに設定されているノード名の場合は配列にする 
     100                                                if (ArrayUtil.contains(arrayTags, childTagName)) 
     101                                                { 
     102                                                        obj[childTagName] = new ArrayExtend(); 
     103                                                        obj[childTagName].push(parse(childTag)); 
     104                                                } 
     105                                                else 
     106                                                { 
     107                                                        obj[childTagName] = parse(childTag); 
     108                                                } 
    96109                                        } 
    97110                                        else 
    98111                                        { 
    99                                                 if (obj[childTagName].__proto__ != Array.prototype) 
     112                                                // 配列じゃない場合は配列に変換 
     113                                                if (obj[childTagName].__proto__ != ArrayExtend.prototype) 
    100114                                                { 
    101115                                                        var temp:Object = obj[childTagName]; 
  • as2/XMLParser/tests/jp/cellfusion/xml/XMLParserTest.as

    r170 r171  
    22 
    33import jp.cellfusion.xml.XMLParser; 
     4import jp.cellfusion.utils.ObjectUtil; 
    45/** 
    5  * @author Makoto Matsutake(cellfusion.jp) 
     6 * @author Makoto 
    67 */ 
    78class jp.cellfusion.xml.XMLParserTest extends TestCase  
     
    1415        public function testToObject():Void 
    1516        { 
    16                 var xml:XML = new XML("<xml>" + 
     17                var xml:XML = new XML("<xml arrayTags='img'>" + 
    1718                        "<person age='18'>" + 
    1819                                "<name><![CDATA[name1]]></name>" + 
     
    2829                                "<list>" + 
    2930                                        "<img src='image3.jpg' />" + 
    30                                         "<img src='image4.jpg' />" + 
    3131                                "</list>" + 
    3232                        "</person>" + 
     
    3535                 
    3636                var data:Object = XMLParser.toObject(xml); 
     37                 
     38                //ObjectUtil.dump(data); 
    3739                 
    3840                // 属性への通常のアクセス 
     
    4951                 
    5052                // ネストされたものへのアクセス 
    51                 assertEquals([["image1.jpg", "image2.jpg"], ["image3.jpg", "image4.jpg"]], data.person.list.img.atSrc); 
     53                assertEquals([["image1.jpg", "image2.jpg"], ["image3.jpg"]], data.person.list.img.atSrc); 
    5254        } 
    5355}