チェンジセット 171
- コミット日時:
- 2007/12/20 22:20:12 (1 年前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as2/XMLParser/src/jp/cellfusion/xml/ArrayExtend.as
r170 r171 4 4 class jp.cellfusion.xml.ArrayExtend extends Array 5 5 { 6 6 7 function __resolve(name:String):Object { 7 8 var temp:Array = new ArrayExtend(); as2/XMLParser/src/jp/cellfusion/xml/XMLParser.as
r170 r171 1 1 import jp.cellfusion.xml.ArrayExtend; 2 import jp.cellfusion.utils.ArrayUtil; 2 3 /** 3 4 * @author Makoto Matsutake(cellfusion.jp) 4 5 * XMLを解析してXMLの構造を参考にしたObjectに変換するクラスです。 5 6 */ 6 class jp.cellfusion.xml.XMLParser { 7 class jp.cellfusion.xml.XMLParser 8 { 9 private static var arrayTags:Array; 7 10 8 11 /** … … 12 15 * import jp.cellfusion.xml.XMLParser 13 16 * 14 * var xml:XML = new XML("<xml >" +17 * var xml:XML = new XML("<xml arrayTag='img,person'>" + 15 18 * "<person age='18'>" + 16 19 * "<name><![CDATA[name1]]></name>" + … … 43 46 { 44 47 var rootNode:XMLNode = xml.firstChild; 48 49 // 強制配列変換するノード名を格納する 50 arrayTags = rootNode.attributes.arrayTags.split(","); 51 trace("arrayTags:"+arrayTags); 52 45 53 var result:Object = parse(rootNode); 46 54 return result; … … 87 95 else if (childTag.nodeType == 1) 88 96 { 89 if (obj .attributes.type == "Array")97 if (obj[childTagName] == null) 90 98 { 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 } 96 109 } 97 110 else 98 111 { 99 if (obj[childTagName].__proto__ != Array.prototype) 112 // 配列じゃない場合は配列に変換 113 if (obj[childTagName].__proto__ != ArrayExtend.prototype) 100 114 { 101 115 var temp:Object = obj[childTagName]; as2/XMLParser/tests/jp/cellfusion/xml/XMLParserTest.as
r170 r171 2 2 3 3 import jp.cellfusion.xml.XMLParser; 4 import jp.cellfusion.utils.ObjectUtil; 4 5 /** 5 * @author Makoto Matsutake(cellfusion.jp)6 * @author Makoto 6 7 */ 7 8 class jp.cellfusion.xml.XMLParserTest extends TestCase … … 14 15 public function testToObject():Void 15 16 { 16 var xml:XML = new XML("<xml >" +17 var xml:XML = new XML("<xml arrayTags='img'>" + 17 18 "<person age='18'>" + 18 19 "<name><![CDATA[name1]]></name>" + … … 28 29 "<list>" + 29 30 "<img src='image3.jpg' />" + 30 "<img src='image4.jpg' />" +31 31 "</list>" + 32 32 "</person>" + … … 35 35 36 36 var data:Object = XMLParser.toObject(xml); 37 38 //ObjectUtil.dump(data); 37 39 38 40 // 属性への通常のアクセス … … 49 51 50 52 // ネストされたものへのアクセス 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); 52 54 } 53 55 }
