flash on 2012-5-1 tepe forked:0favorite:0lines:129license : MIT License modified : 2012-05-14 12:41:20 Embed Tweet package { import flash.display.*; import flash.text.*; import flash.events.*; public class FlashTest extends Sprite { public function FlashTest() { var str:String = new String(); str = '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>' var str2:String = new String(); str2 = "<?xml version='1.0' encoding='UTF-8'?>\n"+ '<node id="275452090" lat="51.5075933" lon="-0.1076186" version="3" changeset="2980587" user="nickb" uid="1697" visible="true" timestamp="2009-10-29T12:14:35Z">\n'+ '\t<tag k="name" v="Jam\'s Sandwich Bar"/>\n' + '\t<tag k="amenity" v="cafe"/>\n' + '</node>\n' + '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z">\n'+ '\t<tag k="name" v="tepe"/>\n' + '\t<tag k="amenity" v="cafe"/>\n' + '</node>\n' + '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z"/>\n'+ '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" user="smsm1" uid="6871" visible="true" timestamp="2008-12-17T01:18:42Z">\n'+ '\t<tag k="name" v="tepe"/>\n' + '\t<tag k="amenity" v="cafe"/>\n' + '\t<tag k="amenity" v="cagfe"/>\n' + //'</node>\n' + '<node id="319408586" lat="51.5074089" lon="-0.1080108" version="1" changeset="440330" us'; var tf:TextField = new TextField(); addChild(tf); tf.width =400; tf.height = 400; tf.text = "aaa"; tf.multiline = true; var n:int = str2.lastIndexOf("\n"); var str3:String = str2.substring(n+1,str2.length); str2 = str2.substring(0,n); str2 = "<osm>"+str2+"</osm>"; tf.text = getNodeString(str2); //tf.appendText("\n@@@@\n"+str2); //if(list3 == null)tf.text = "null"; //else tf.text = list3.length().toString(); //tf.text = parse(str2); //tf.text = str3; //tf.text = str2; /* var xml:XMLList = new XMLList(str2); //var list:XMLList = xml[2].attribute("@id"); //tf.text = xml.contains(<tag k="name" v="Jam\'s Sandwich Bar"/>); tf.appendText("\n"+xml[0].@id); //tf.appendText("\n"+xml[1].@id); //tf.appendText("\n"+xml.hasOwnProperty("@lat")); tf.appendText("\n"+xml.length()); //tf.appendText("\nlist"+list.length()); tf.appendText("\nadd:"+addDB(str2)); var ar:Array = getXmlTag(str2); tf.text = ""; tf.text = ar.length.toString()+"\n"; for(var i:int=0;i<ar.length;i++){ var xm:XML = new XML(ar[i]); //tf.appendText(ar[i]);//+"\n\n"); tf.appendText(xm.tag[0].attributes()+"\n") tf.appendText("tag:"+xm.tag.length().toString()+"\n\n"); } */ } private function getNodeString(str:String):String{ var st:int = str.indexOf("<node ");//先頭カット位置 //終了カット位置を探す var last:int = str.lastIndexOf(">"); while (last != -1) { var n1:int = str.lastIndexOf(">", last-1); var n2:int; //タグ無しを検討 n2 = str.indexOf("<node ", n1); if (n2 != -1 && n2 < last) { var n3:int = str.lastIndexOf("/>", last); if (n3 != -1 && n3 > n2) { var strA:String = str.substring(st, n3+2); str = str.substring(0,n3+2); return strA; } } //タグあり n2 = str.indexOf("</node>",n1); if(n2 != -1 && n2 < last) { var strB:String = str.substring(st,n2+7); str = str.substring(0,n2+7); return strB; } last = str.lastIndexOf(">", last-1); } return ""; } private function parse(src:String):String { var xml:XML = new XML(src); var str:String = ""; for each (var element:XML in xml.elements()) { var id:String = element.@id; var name:String = element.name(); var lat:String = element.@lat; var lon:String = element.@lon; var tag:String = element.elements(); var attribute:XMLList = element.attributes(); var str2:String=""; for each(var e:XML in attribute){ str2 += e.name()+ ":"+e + "\n"; } str += name + " id="+ id + " lat=" + lat + " lon=" + lon + "\n"+ str2 + "\n"+tag+"\n\n"; } return str; } //xmlを受け取りDBに渡す private function addDB(str:String):String{ //<node> <way> <relation> で分類 var ar:Array = str.match(/<.*>/gm); var result:String = new String(); for(var i:int=0;i<ar.length;i++){ result += ar[i]+"\n"; } return result; return ar.length.toString(); } //Stringから<>単位で切り出す。 public function getXmlTag(source:String):Array{ var ar:Array = source.match(/<[^\?].*>/gm);//書式、制御をスルー ar = xmlTags(ar); return ar; } //要素単位 public function xmlTags(ar:Array):Array{ var ar2:Array = new Array(); var str:String = new String(); var stac:int=0; var j:int; for(var i:int=0;i<ar.length;i++){ if(ar[i].search(/\/>/gm) > 0){//単タグ if(stac==0)ar2.push(ar[i]); else{ for(j=0;j<stac;j++)str += "\t";//インデント str += ar[i]+"\n"; } } else{//複タグ if(ar[i].search(/<\//gm) > -1){//タグ終わり stac--; for(j=0;j<stac;j++)str += "\t";//インデント str += ar[i]; } else{//タグ開始 for(j=0;j<stac;j++)str += "\t";//インデント str += ar[i]+"\n"; stac++; } if(stac==0){ if(0 < str.length){ ar2.push(str); str = ""; } } } }//for return ar2; } } } Code Fullscreen Preview Fullscreen attribute XML indexOf search substring String attributes lastIndexOf elements Date.parse match XMLList name source multiline toString text height width push