flash on 2012-5-1
♥0 |
Line 129 |
Modified 2012-05-14 12:41:20 |
MIT License
archived:2017-03-30 02:54:16
ActionScript3 source code
/**
* Copyright tepe ( http://wonderfl.net/user/tepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/r3h1
*/
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;
}
}
}