发新话题
打印

[编程] 写了个和as3的xml差不多的类,又跟hashmap有点像,可实现多维数组

写了个和as3的xml差不多的类,又跟hashmap有点像,可实现多维数组

写了个和as3的xml差不多的类,又跟hashmap有点像,可实现多维数组

space类 将路径更改就可以直接使用

类的使用方法是 可以将数组 对象 字符串 数字 和 xml链表 等数据 存放到其中 便于查找

首先声明 此脚本可能存在未知bug , depth深度可能返回有错误

声明对象
var s:space=new space()
添加参数
s[name]=value
或是
s.add(name,value)
或是
s.add(value)

添加xml文档[xml文档为xml读取到的xml文件]
s.addXML(xml)

调用方法
读取s的变量参数名称[通过s[name]添加的无法得到]
s.list
读取s中的变量个数
s.length
读取s的变量深度[若变量中存在数组或是对象 通过add会进一步添加深度  xml表也是一样 通过下级分支不断扩展 深度会增加]
s.depth

直接调用s
若s加载的为xml文档
那么可以通过s,s[0],s[1],s[0][1][0]这样的方式 查看子分支

例子1
复制内容到剪贴板
代码:
var s:space = new space()
s.add("zszen",www.zszen.com)
s.add([1,[2],[3,[3,4]],[5,[6,[7]]]])
s.length //5
s.depth  //3
s.list       //0,1,2,3,zszen
s.zszen   //www.zszen.com
s[0]       //1
s[1][0]   //2
s[3][1][1]  //7
例子2
/*
复制内容到剪贴板
代码:
<?xml version='1.0' encoding='gb2312' ?>
<test>
<part name="part one" value="ok"/>
<part name="part two" value="yeah!!!">
  <sub>zszen</sub>
</part>
</test>
*/
复制内容到剪贴板
代码:
var s:space=new space()
s.addXML(xml)
s     //上面的code
s[0]  //包括test的子叉
s[0][1][0]  //sub 子叉
s[0][1][0][0] //zszen
复制内容到剪贴板
代码:
/*
var s:space = new space()
s.addXML(value)
//s.add([1,[2],[3,[3,4]],[5,[6,[7]]]])
//trace(s[0][1][1].nvalue)
trace(s[0][0].value)
//trace(s[0][1].length)
//trace(s[0][1].list)
*/
dynamic class com_zszen.base.space {
private var name_space:Object
private var dep:Number
private var xmlDateSubAll:XMLNode
public function space() {
  name_space = { }
  xmlDateSubAll=new XMLNode()
  dep=0
}
public function get list():Array {
  var ary:Array=[]
  for (var name in name_space) {
   ary.push(name)
  }
  return ary
}
public function get depth():Number {
  return dep
}
public function get length():Number {
  var len:Number=0
  for (var name in name_space) {
   len++
  }
  return len
}
public function toString() {
  return xmlDateSubAll.toString()
  //return "zszen space class"
}
public function add(nameOrValue, valueOrNull) {
  if (typeof(nameOrValue) == "object" || typeof(nameOrValue) == "array") {
   for (var name in nameOrValue) {
    dep = Math.max(dep, addLoopEnd(name, nameOrValue[name], 0))
   }
  }else{
   dep = Math.max(dep, addLoopEnd(nameOrValue, valueOrNull, 0))
  }
}
public function addXML(xml:XMLNode) {
   dep = addLoopXMLEnd(xml)-1
}
private function addLoopEnd(name:String, value, deep:Number):Number {
  if (typeof(value) == "object" || typeof(value) == "array") {
   deep++
   name_space[name] = null
   this[name] = new space()
   for (var tname in value) {
    this[name].dep = Math.max(this[name].dep, this[name].addLoopEnd(tname, value[tname], deep))
   }
   return this[name].dep
  }else {
   name_space[name] = null
   this[name] = value
   return deep
  }
}
public function addLoopXMLEnd(xmldata:XMLNode):Number {
  xmlDateSubAll=xmldata
  var deep = arguments[1] == null?0:arguments[1] + 1;
  var xml:XMLNode = xmldata
  add("nname", xml.nodeName)
  add("ntype", xml.nodeType)
  add("nvalue", xml.nodeValue)
  for (var name in xml.attributes) {
   add(name,xml.attributes[name])
  }
  if (xml.hasChildNodes()) {
   var maxDeep:Number=0
   for (var i = 0; i < xml.childNodes.length; i++) {
    this[i.toString()] = new space()
    this[i.toString()].dep = this[i.toString()].addLoopXMLEnd(xml.childNodes, 0)
    maxDeep=Math.max(this[i.toString()].dep+deep,maxDeep)
   }
   return maxDeep
  }else {
   return deep
  }
}
}
[ 本帖最后由 zszen 于 2008-1-9 10:53 编辑 ]

附件

space.as (2.31 KB)

2008-1-8 17:18, 下载次数: 49

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

厉害
一直在做最最最基础的工作......

TOP

还是有点不明白 能给个解释吗  版主

TOP

发新话题